两个List集合取交集、并集、差集、去重并集的一个简单Demo,可供参考:
import ;
import ;
import static ;
public class Test {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
("1");
("2");
("3");
("5");
("6");
List<String> list2 = new ArrayList<String>();
("2");
("3");
("7");
("8");
// 交集
List<String> intersection = ().filter(item -> (item)).collect(toList());
("---交集 intersection---");
().forEach( :: println);
// 差集 (list1 - list2)
List<String> reduce1 = ().filter(item -> !(item)).collect(toList());
("---差集 reduce1 (list1 - list2)---");
().forEach( :: println);
// 差集 (list2 - list1)
List<String> reduce2 = ().filter(item -> !(item)).collect(toList());
("---差集 reduce2 (list2 - list1)---");
().forEach( :: println);
// 并集
List<String> listAll = ().collect(toList());
List<String> listAll2 = ().collect(toList());
(listAll2);
("---并集 listAll---");
().forEachOrdered( :: println);
// 去重并集
List<String> listAllDistinct = ().distinct().collect(toList());
("---得到去重并集 listAllDistinct---");
().forEachOrdered( :: println);
("---原来的List1---");
().forEachOrdered( :: println);
("---原来的List2---");
().forEachOrdered( :: println);
}
}
private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
List<Integer> list2=new ArrayList<>();
list.add(1);
list.add(6);
list.add(6);
list.add(7);
list.addAll(list2);
list = list.stream().filter(distinctByKey(Integer::intValue)).collect(Collectors.toList());
System.out.println(list);
}