我想同时执行两个流并生成第三个流作为前两个的组合,假设我有以下两个流
Stream<String> a = Stream.of("f","b","z");
Stream<String> b = Stream.of("foo","bar","baz");
Run Code Online (Sandbox Code Playgroud)
我想从这两个中生成一个新的,这相当于这个
Stream<String> c = Stream.of("f:foo","b:bar","z:baz");
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的是Stream.concat或Stream.of
Stream<String> result = Stream.concat(a, b); or
Stream<String> result = Stream.of(a, b).flatMap(s -> s);
Run Code Online (Sandbox Code Playgroud)
两者相互依存并与此相对应
Stream.of("f","b","z","foo","bar","baz");
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的解决方法是将两个流的元素收集到一个列表中,并遍历两个列表以连接单个元素并将结果列表转换为流。strem api中是否有较短的方法或现有功能可以同时在两个流上工作?
List<String> aList = a.collect(Collectors.toList());
List<String> bList = b.collect(Collectors.toList());
List<String> result = new ArrayList<>();
for(int i = 0; i< aList.size(); i++){
result.add(aList.get(i)+":"+bList.get(i));
}
Stream<String> cc = result.stream();
Run Code Online (Sandbox Code Playgroud)
此操作通常称为zip,并且在StreamAPI 中不作为函数存在。从此答案中可以看出,您自己很难实现它:https : //stackoverflow.com/a/23529010/4137489
不过,该功能是在Google Guava库中实现的:
您可以像这样使用它:
Streams.zip(a, b, (aElem, bElem) -> aElem + ":" + bElem));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |