为了账号安全,请及时绑定邮箱和手机立即绑定

合并两个流以创建一个新流

合并两个流以创建一个新流

精慕HU 2023-04-26 16:32:36
我想同时执行两个流并生成第三个流作为前两个流的组合。假设我有以下两个流Stream<String> a = Stream.of("f","b","z");Stream<String> b = Stream.of("foo","bar","baz");我想从这两个生成一个新的,相当于这个Stream<String> c = Stream.of("f:foo","b:bar","z:baz");到目前为止我发现的是Stream.concat或Stream.of Stream<String> result = Stream.concat(a, b); or Stream<String> result = Stream.of(a, b).flatMap(s -> s);两者相互依存并对应于此处Stream.of("f","b","z","foo","bar","baz");到目前为止,我的解决方法是将两个流的元素分别收集到一个列表中,然后遍历两个列表以连接单个元素并将结果列表转换为一个流。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();
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

这个操作通常被称为zip,它在 API 中不作为函数存在Stream。自己实现它有点困难。

你可以像这样使用它:

Streams.zip(a, b, (aElem, bElem) -> aElem + ":" + bElem));


查看完整回答
反对 回复 2023-04-26
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

您可以使用以下IntStream.range()方法:

IntStream.range(0, aList.size()).mapToObj(index -> aList.get(index) + ":" + bList.get(index)).collect(Collectors.toList());



查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信