假设我们有以下方法.

void some(int id, int... otherIds) {

}

我如何用这两个参数创建一个IntStream

IntStream.concat(
        IntStream.of(id),
        Optional.ofNullable(otherIds)
                .map(IntStream::of)
                .orElseGet(IntStream::empty)
);

这似乎很冗长.我们有什么简洁的成语吗?

推荐答案

当您需要处理可为空的流源时,您可以使用Java 9可访问的Stream.ofNullable(),它会生成单例流或空流.它将比使用Optional.ofNullable()链接方法更干净.

IntStream.concat(IntStream.of(id),
    Stream.ofNullable(otherIds).flatMapToInt(IntStream::of))

另一个选项是使用Java 9静态方法Objects.requireNonNullElse(),该方法需要一个可为空的参数和一个默认值:

IntStream.concat(IntStream.of(id),
    IntStream.of(Objects.requireNonNullElse(otherIds, new int[0])))

最简单、最干净的解决方案将是一个快速失效的实现,如果数组otherIdsnull,它将抛出NullPointerException.

IntStream.concat(IntStream.of(id), IntStream.of(otherIds))

Java相关问答推荐

RxJava PublishSubject缓冲区元素超时

为什么一个java函数会返回一个作为参数传递给它的对象?

我无法将附件发送到NetBeans之外

Java .类参数不通过构造函数传递

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

通过合并Akka Streams中的多个慢源保持订购

RESTful框架类字段是安全的还是不安全的

Jolt变换JSON数组问题

对字符串长度进行排序,但颠倒了顺序(最长字符串在前)

如何为JavaFX Spring Boot应用程序制作Windows/MacOS/Linux安装程序

Java中不兼容的泛型类型

带有可选部分的Java DateTimeForMatter

如何根据配置动态创建N个bean

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

泛型与泛型问题的完美解决方案?

用于Java的Visual Studio代码完成不起作用

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

ANTLR 接受特殊字符,例如 .标识符或表达式中的(点)和 ,(逗号)

在Java中,在Object#equals()调用期间,两个对象是否必须具有相同的hashCode?我们是否需要在 equals() 中比较 hashCode?