Java 学习笔记 - 集合运算

Posted 笑虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 学习笔记 - 集合运算相关的知识,希望对你有一定的参考价值。

Java 学习笔记 - 集合运算

List.retainAll 交集

// 测试数据
List<Integer> listA = IntStream.rangeClosed(1,6).boxed().collect(Collectors.toList());
List<Integer> listB = IntStream.rangeClosed(4,10).boxed().collect(Collectors.toList());

// listA 交 listB。
boolean b = listA.retainAll(listB);
System.out.println(b); // 当 listA 发生改变返回 true
System.out.println(listA); // [4, 5, 6]

boolean b1 = listA.retainAll(listA);
System.out.println(b1); // 当 listA 没发生该变返回 false
System.out.println(listA); // [4, 5, 6]

CollectionUtils

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>
// 测试数据
List<Integer> listA = IntStream.rangeClosed(1,6).boxed().collect(Collectors.toList());
List<Integer> listB = IntStream.rangeClosed(4,10).boxed().collect(Collectors.toList());

// 交集:保留两个集合中都有的元素
Collection<Integer> intersect1 = CollectionUtils.retainAll(listA, listB);
Collection<Integer> intersect2 = CollectionUtils.retainAll(listA, listB);
System.out.println(intersect1); // [4, 5, 6]
System.out.println(intersect2); // [4, 5, 6]

// 并集:合并两个集合
Collection<Integer> union1 = CollectionUtils.union(listA, listB);
Collection<Integer> union2 = CollectionUtils.union(listB, listA);
System.out.println(union1); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
System.out.println(union2); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// (交集的)补集
// AB并集 - AB交集
Collection<Integer> disjunction1 = CollectionUtils.disjunction(listA, listB);
Collection<Integer> disjunction2 = CollectionUtils.disjunction(listB, listA);
System.out.println(disjunction1); // [1, 2, 3, 7, 8, 9, 10]
System.out.println(disjunction2); // [1, 2, 3, 7, 8, 9, 10]

//===================================================================
// 差集
// 去掉 A 中,勾结 B 的元素。(对比AB,保留仅在 A 中包含的元素)
Collection<Integer> except1 = CollectionUtils.subtract(listA, listB);
// 去掉 B 中,勾结 A 的元素。(对比AB,保留仅在 B 中包含的元素)
Collection<Integer> except2 = CollectionUtils.subtract(listB, listA);
System.out.println(except1); // [1, 2, 3]
System.out.println(except2); // [7, 8, 9, 10]

Java8 Stream

List<Integer> listA = IntStream.rangeClosed(1, 6).boxed().collect(Collectors.toList());
List<Integer> listB = IntStream.rangeClosed(4, 10).boxed().collect(Collectors.toList());

// 交集
List<Integer> intersection = listA.stream()
        .filter(a -> listB.contains(a))
        .collect(Collectors.toList());
System.out.println(intersection); // [4, 5, 6]

// 并集
List<Integer> union = Stream.concat(listA.stream(), listB.stream()).distinct().collect(Collectors.toList());
System.out.println(union); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

boolean b = listA.addAll(listB);
System.out.println(b); // 如果 listA 有改变 true
List<Integer> collect = listA.stream().distinct().collect(Collectors.toList());
System.out.println(collect); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

//===================================================================
// 差集
// 在 A 中去掉 B 也有的元素
List<Integer> subtraction = listA.stream()
        .filter(a -> !listB.contains(a))
        .collect(Collectors.toList());
System.out.println(subtraction); // [1, 2, 3]

// 在 B 中去掉 A 也有的元素
List<Integer> subtraction2 = listB.stream()
        .filter(a -> !listA.contains(a))
        .collect(Collectors.toList());
System.out.println(subtraction2); // [7, 8, 9, 10]

参考资料

List.retainAll (Java Platform SE 8 )
Apache Commons 集合工具类:commons-collections
java.util.stream.Stream (Java Platform SE 8 )

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于Java 学习笔记 - 集合运算的主要内容,如果未能解决你的问题,请参考以下文章

DAY12第十二天集合&泛型&IO学习笔记

java学习笔记

JAVA笔记学习

JAVA笔记学习

JAVA笔记学习

JAVA笔记学习