簡體   English   中英

同時迭代兩個列表並使用流創建另一個列表

[英]Iterate two lists simultaneously and create another using 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 流的新手。

注意: 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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM