java8两个list根据某一属性取交集

本文介绍了如何使用Java8的Stream API,结合parallelStream和map操作,从两个User对象列表中找到具有相同ID的元素,并将它们的名字属性合并。通过遍历list1,对每个元素查找list2中相同ID的User,然后更新名字,最后收集到新的列表result中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class User {

    public User(Integer id, String name) {

        this.id = id;

        this.name = name;

    }

    private Integer id;

    private String name;

    public Integer getId() {

        return id;

    }

    public void setId(Integer id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    @Override

    public String toString() {

        return "id =" + id + ", name = " + name;

    }

}

public class Demo {

    private static User find(Integer id, List<User> list) {

        User user = null;

        for (int i = 0; i < list.size(); i++) {

            if (id.equals(list.get(i).getId())) {

                user = list.get(i);

            }

        }

        return user;

    }

    public static void main(String[] args) {

        List<User> list1 = Arrays.asList(new User(1, "小明"), new User(2, "小花"), new User(3, "小华"), new User(4, "小东"));

        List<User> list2 = Arrays.asList(new User(1, "小明2"), new User(2, "小花2"), new User(3, "小华2"));

        List<User> result = list1.parallelStream().map( user ->{

            User user1 = list2.stream().filter(u -> u.getId().equals(user.getId())).findFirst().orElse(null);

            if(null != user1){

                user.setName(user1.getName());

            }

            return user;

        }).collect(Collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值