本文介紹了同時迭代兩個列表并使用STREAMS創建另一個列表的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我希望使用STREAMS實現以下目標:
List<MyObject> list1 = Arrays.asList(obj1, obj2, obj3);
List<Boolean> list2 = Arrays.asList(true, false, true);
List<MyObject> list = new ArrayList<>();
for(int i=0; i<list1.size();i++) {
if(list2.get(i))
list.add(list1.get(i));
}
有人能幫忙嗎?這應該很容易,但我對Java Streams還是個新手。
注意:list1和list2的長度始終相同。
推薦答案
您可以執行以下操作:
List<MyObject> list = IntStream.range(0, list1.size())
.filter(i->list2.get(i))
.map(i->list1.get(i))
.collect(Collectors.toList())
如果Java具有用于流的內置zip
,情況可能會更好。例如,對于番石榴,您可以使用:
Streams.zip(list2.stream(), list1.stream(), (a,b) -> a ? b : null)
.filter(Objects::nonNull)
.collect(Collectors.toList())
這篇關于同時迭代兩個列表并使用STREAMS創建另一個列表的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,