java取集合交集

java取集合交集

一、交集

构造数据

private static void buildList() {
        User u1 = new User("test1", 18);
        User u2 = new User("test2", 19);
        User u3 = new User("test3", 20);
        User u4 = new User("test4", 21);
        User u5 = new User("test5", 22);
        list1.add(u1);
        list1.add(u2);
        list1.add(u3);

        list2.add(u3);
        list2.add(u4);
        list2.add(u5);

        System.out.println("集合1:" + list1);// 集合1:[User(name=test1, age=18), User(name=test2, age=19), User(name=test3, age=20)]
        System.out.println("集合2:" + list2);// 集合2:[User(name=test3, age=20), User(name=test4, age=21), User(name=test5, age=22)]
    }

数据如图:

注意:该数据中都有name为test3的用户,交集为User(name=test3, age=20)
在这里插入图片描述

  • 方法一:使用java内置函数retainAll(Collection<?> c)
/**
 * retainAll可以获取list1和list2的交集,但是会改变list1的数据
 * 如果需要判断是否存在,需要判断移除后的list1是否还存在数据,不存在则说明两个不存在交集
 */
private static void method1(List<User> list1, List<User> list2) {
	list1.retainAll(list2);
	if (list1.size() > 0) {
		System.out.println("存在交集为:" + list1);
    } else {
        System.out.println("不存在交集");
    }
}
  • 方法二: 遍历集合

    /**
         * 遍历循环list1,如果list2中包含,则添加到新定义的集合中存储
         */
        private static void method2(List<User> list1, List<User> list2) {
            List<User> intersectionList = new ArrayList<>();
            // 遍历list1
            /* for (User user : list1) {
                if (list2.contains(user)) {
                    intersectionList.add(user);
                }
            } */
            // 流式遍历list1
            list1.forEach(item -> {
                if (list2.contains(item)) {
                    intersectionList.add(item);
                }
            });
            if (intersectionList.size() > 0) {
                System.out.println("存在交集,交集为:" + intersectionList);
            } else {
                System.out.println("不存在交集");
            }
        }
    
  • 方法三:(map)大数据量下最高效

private static void method3(List<User> list1, List<User> list2) {
        List<User> intersectionList = new ArrayList<>();
        // 1、将list1存储在map中,key为name,value为User对象
        Map<String, User> hashMap = list1.stream().collect(Collectors.toMap(User::getName, user -> user, (key1, key2) -> key2));
        // 2、遍历list2,根据list1转换的map的key去获取值,存在则添加到集合中,
        list2.forEach(item -> {
            if (hashMap.get(item.getName()) != null) {
                intersectionList.add(item);
            }
        });
        if (intersectionList.size() > 0) {
            System.out.println("存在交集,交集为:" + intersectionList);
        } else {
            System.out.println("不存在交集");
        }
    }

交集结果为:
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值