Jis*_*hap 4 java java-8 java-stream
我有两个整数流来宾TravelWith 和来宾,当流中的任何一个为 Null 时,我正在连接它们但抛出错误。是否有连接两个流的 nullsafe 方法?或者使用 if 条件是我唯一的希望?
Stream<Integer> guests = code+some_method();
Stream<Integer> guestsTravelWith = code+some_method();
Stream.concat(guestsTravelWith, guests)
Run Code Online (Sandbox Code Playgroud)
一点都不好看,但是:
Stream.ofNullable(guestsTravelWith).orElse(Stream.empty()).flatMap(Function.identity())
Run Code Online (Sandbox Code Playgroud)
或者你知道,“不那么有趣”的方式:
guests == null ? Stream.empty() : guests;
Run Code Online (Sandbox Code Playgroud)
您应该重新考虑返回null
Stream的方法,这是一个糟糕的主意。
为什么不只是过滤掉null
流?
Stream<Integer> s1 = null;
Stream<Integer> s2 = Stream.of(1, 2, null, 4);
Stream.of(s1, s2)
.filter(Objects::nonNull) // Stream<Stream>
.flatMap(s -> s) // or Function.identity()
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
霍尔格评论的更新
Stream.concat
应替换为Stream.of
null-safe Stream::flatMap
:
<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
返回一个流,该流由通过将提供的映射函数应用于每个元素而生成的映射流的内容替换此流的每个元素的结果组成。每个映射流在其内容放入该流后关闭。(如果映射流为空,则使用空流代替。)
Stream<Integer> s1 = null;
Stream<Integer> s2 = Stream.of(1, 2, null, 4);
Stream.of(s1, s2)
.flatMap(s -> s) // or Function.identity()
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
null
4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
141 次 |
最近记录: |