如何使用固定参数和可变参数创建流?
How can I make stream with fixed arguments along with varargs?
假设我们有以下方法。
void some(int id, int... otherIds) {
}
如何使用这两个参数创建一个 IntStream
?
IntStream.concat(
IntStream.of(id),
Optional.ofNullable(otherIds)
.map(IntStream::of)
.orElseGet(IntStream::empty)
);
看起来很冗长。我们有什么简明的成语吗?
当您需要处理可为空的 stream-source 时,您可以使用 Stream.ofNullable()
可通过 Java 9 访问,这会生成 singleton-stream 或空流。它比使用 Optional.ofNullable()
来链接方法更干净。
IntStream.concat(IntStream.of(id),
Stream.ofNullable(otherIds).flatMapToInt(IntStream::of))
另一种选择是使用 Java 9 静态方法 Objects.requireNonNullElse()
,它需要一个可为 null 的参数和一个默认值:
IntStream.concat(IntStream.of(id),
IntStream.of(Objects.requireNonNullElse(otherIds, new int[0])))
最简单和最干净的解决方案是 fail-fast 实现,如果数组 otherIds
是 null
,它将抛出 NullPointerException
。
IntStream.concat(IntStream.of(id), Arrays.stream(otherIds))
它的 null-safe 风味(归功于 @Holger):
IntStream.concat(IntStream.of(id),
otherIds != null ? Arrays.stream(otherIds) : IntStream.empty())
嗯,Alexander Ivanchenko 已经提到了三个选项。
这是另一个:
Objects.requireNonNull(otherIds);
Stream.of(new int[] { id }, otherIds)
.flatMapToInt(Arrays::stream)
我觉得otherIds
不应该是null
,应该算是程序员的错误。用 Objects::requireNonNull
它 fails-fast.
假设我们有以下方法。
void some(int id, int... otherIds) {
}
如何使用这两个参数创建一个 IntStream
?
IntStream.concat(
IntStream.of(id),
Optional.ofNullable(otherIds)
.map(IntStream::of)
.orElseGet(IntStream::empty)
);
看起来很冗长。我们有什么简明的成语吗?
当您需要处理可为空的 stream-source 时,您可以使用 Stream.ofNullable()
可通过 Java 9 访问,这会生成 singleton-stream 或空流。它比使用 Optional.ofNullable()
来链接方法更干净。
IntStream.concat(IntStream.of(id),
Stream.ofNullable(otherIds).flatMapToInt(IntStream::of))
另一种选择是使用 Java 9 静态方法 Objects.requireNonNullElse()
,它需要一个可为 null 的参数和一个默认值:
IntStream.concat(IntStream.of(id),
IntStream.of(Objects.requireNonNullElse(otherIds, new int[0])))
最简单和最干净的解决方案是 fail-fast 实现,如果数组 otherIds
是 null
,它将抛出 NullPointerException
。
IntStream.concat(IntStream.of(id), Arrays.stream(otherIds))
它的 null-safe 风味(归功于 @Holger):
IntStream.concat(IntStream.of(id),
otherIds != null ? Arrays.stream(otherIds) : IntStream.empty())
嗯,Alexander Ivanchenko 已经提到了三个选项。
这是另一个:
Objects.requireNonNull(otherIds);
Stream.of(new int[] { id }, otherIds)
.flatMapToInt(Arrays::stream)
我觉得otherIds
不应该是null
,应该算是程序员的错误。用 Objects::requireNonNull
它 fails-fast.