我想同時執行兩個流并生成第三個流作為前兩個流的組合。假設我有以下兩個流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));

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
您可以使用以下IntStream.range()
方法:
IntStream.range(0, aList.size()).mapToObj(index -> aList.get(index) + ":" + bList.get(index)).collect(Collectors.toList());
添加回答
舉報
0/150
提交
取消