ski*_*iwi 48 java java-8 java-stream
目前我们Stream.concat在Java 8中有以下内容:
public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b);
Run Code Online (Sandbox Code Playgroud)
我很惊讶为什么没有版本采取varargs Stream<? extends T>?
目前我的代码编写如下:
Stream<Integer> resultStream = Stream.concat(stream1, Stream.concat(stream2, Stream.of(element)))
.filter(x -> x != 0)
.filter(x -> x != 1)
.filter(x -> x != 2);
Run Code Online (Sandbox Code Playgroud)
如果提供此签名的varargs:
public static <T> Stream<T> concat(Stream<? extends T>... streams);
Run Code Online (Sandbox Code Playgroud)
然后我可以更清楚地写出:
Stream<Integer> resultStream = Stream.concat(
stream1,
stream2,
Stream.of(element)
)
.filter(x -> x != 0)
.filter(x -> x != 1)
.filter(x -> x != 2);
Run Code Online (Sandbox Code Playgroud)
没有各种嵌套Stream.concat调用.
还是有其他原因没有提供?
我无法想到这样的原因,因为我们现在最终还是在做varargs电话.
Bor*_*der 49
就是flatMap这样:
public static void main(final String[] args) throws Exception {
final Stream<String> stream1 = /*some stream*/
final Stream<String> stream2 = /*some stream*/
final Stream<String> stream3 = /*some stream*/
final Stream<String> stream4 = /*some stream*/
final Stream<String> stream5 = /*some stream*/
final Stream<String> stream = Stream.of(stream1, stream2, stream3, stream4, stream5).flatMap(Function.identity());
}
Run Code Online (Sandbox Code Playgroud)
在你的例子中:
Stream<Integer> resultStream = Stream.of(stream1, stream2, Stream.of(element))
.flatMap(identity())
.filter(x -> x != 0)
.filter(x -> x != 1)
.filter(x -> x != 2);
Run Code Online (Sandbox Code Playgroud)
ass*_*ias 33
Stream.of(s1, s2, s3, ...)
/* .parallel() if you want*/
.reduce(Stream::concat)
.orElseGet(Stream::empty);
Run Code Online (Sandbox Code Playgroud)