栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 学习笔记 - 集合运算

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 学习笔记 - 集合运算

Java 学习笔记 - 集合运算
  • List.retainAll 交集
  • CollectionUtils
  • Java8 Stream
  • 参考资料

List.retainAll 交集
// 测试数据
List listA = IntStream.rangeClosed(1,6).boxed().collect(Collectors.toList());
List 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

    org.apache.commons
    commons-collections4
    4.4

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

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

// 并集:合并两个集合
Collection union1 = CollectionUtils.union(listA, listB);
Collection 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 disjunction1 = CollectionUtils.disjunction(listA, listB);
Collection 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 except1 = CollectionUtils.subtract(listA, listB);
// 去掉 B 中,勾结 A 的元素。(对比AB,保留仅在 B 中包含的元素)
Collection except2 = CollectionUtils.subtract(listB, listA);
System.out.println(except1); // [1, 2, 3]
System.out.println(except2); // [7, 8, 9, 10]

Java8 Stream
List listA = IntStream.rangeClosed(1, 6).boxed().collect(Collectors.toList());
List listB = IntStream.rangeClosed(4, 10).boxed().collect(Collectors.toList());

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

// 并集
List 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 collect = listA.stream().distinct().collect(Collectors.toList());
System.out.println(collect); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

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

// 在 B 中去掉 A 也有的元素
List 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 )

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号