Java8的stream处理List集合的(交集、差集,重复)
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("2");
list1.add("3");
list1.add("3");
list1.add("5");
list1.add("5");
List<String> list2 = new ArrayList<String>();
list2.add("1");
list2.add("2");
list2.add("6");
list2.add("7");
list2.add("8");
list2.add("9");
// 交集
List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
System.out.println("---交集 intersection---");
intersection.parallelStream().forEach(System.out :: println);
// 差集 (list2 - list1)
List<String> reduce1 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
System.out.println("---差集 reduce1 (list2 - list1)---");
reduce1.parallelStream().forEach(System.out :: println);
// 获取集合 重复元素
List<String> collect = list1.stream()
.collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)) // 获取元素出现频率的 Map ,键为元素 值为元素重复次数
.entrySet().stream() //Set<Entry> 转为 Stream<Entry>
.filter(e -> e.getValue() > 1) // 过滤元素出现次数大于 1 的 entry
.map(e -> e.getKey()) // 获得 entry 的键(重复的元素)对应的 Stream
.collect(Collectors.toList()); // 转换为 List
System.out.println("---重复元素 reduce1 (list1 - list2)---");
collect.parallelStream().forEach(System.out :: println);
}
import org.apache.commons.collections.CollectionUtils;
public static void main(String[] args) {
List<String> list1 = Lists.newArrayList("1","2","3","3");
List<String> list2 = Lists.newArrayList("1","2","3");
List<String> list3 = Lists.newArrayList("1","2","3");
List<String> list4 = Lists.newArrayList("3","4","5");
System.out.println("集合并集-CollectionUtils.union()");
System.out.println(CollectionUtils.union(list1,list2));
System.out.println("集合交集-CollectionUtils.intersection()");
System.out.println(CollectionUtils.intersection(list1,list2));
System.out.println("集合差集-CollectionUtils.subtract()");
System.out.println(CollectionUtils.subtract(list1,list2));
System.out.println("集合差集-CollectionUtils.subtract()");
System.out.println(CollectionUtils.subtract(list3,list4));
System.out.println("集合补集-CollectionUtils.disjunction()");
System.out.println(CollectionUtils.disjunction(list1,list2));
// System.out.println("集合交集-list1.retainAll(list2)"); // System.out.println(list1.retainAll(list2)); // System.out.println(list1); // System.out.println("集合差集-list1.removeAll(list2)"); // System.out.println(list1.removeAll(list2)); // System.out.println(list1);
}