2015-10-21 72 views
1

是否可以根據來自其他列表的條目減少列表?使用其他列表中的值減少列表

下面是類似的東西:

list1.forEach(l1 -> { 
    list2.forEach(l2 -> { 
     if (l1.getId() == l2.getId()) 
      reducedActions.add(l2); // that's the new list where the filtered entries should be add 
    }); 
}); 

編輯:我excpect什麼:

l1: 10, 15, ,16 
l2: 1, 2, 12, 10, 11, 14, 16 
reducedActions: 10, 16 
+1

你是什麼意思的減少?減少(聚合)和篩選(選擇)是兩件不同的事情。 – kai

+2

你能解釋一下你期望的結果嗎? – Holger

+0

請參閱我的編輯 –

回答

6

這個怎麼樣?

Set<Integer> ids = list2.stream().map(e -> e.getId()).collect(Collectors.toSet()); 
List<ElementType> reducedActions = list1.stream().filter(e -> ids.contains(e.getId())).collect(Collectors.toList()); 
+3

不要忘記將第二個操作的結果分配給一個變量... – Holger

+0

@Holger是:)我只是不知道什麼類型的對象包含list1和list2,並且不想結果使用列表。 – hr6134

+4

說'列表'或類似的。讀者應該能夠適應... – Holger

0

隨着List.retainAll很簡單:

List<Integer> list = new ArrayList<Integer>(list2); 
list.retainAll(list1); 

用法:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class ReduceList { 
    public static void main(String[] args) { 
     List<Integer> list1 = Arrays.asList(10, 15, 16); 
     List<Integer> list2 = Arrays.asList(1, 2, 12, 10, 11, 14, 16); 
     List<Integer> list = new ArrayList<Integer>(list2); 

     list.retainAll(list1); 

     System.out.println(list); 
    } 
} 
相關問題