使用Java 8合并两个具有唯一id的列表中的对象

2024-01-02

class Human {
    Long humanId;
    String name;
    Long age;
}


class SuperHuman {
    Long superHumanId;
    Long humanId;
    String name;
    Long age;
}

我有两个清单。人类列表和超人类列表。我想从两个列表中创建一个列表,确保如果一个人是超人,它只使用 java 8 在列表中出现一次。有没有一种巧妙的方法来做到这一点? 更新:这些是不同的类,即两者都不会扩展另一个类。我希望最终名单是超人。如果一个人已经是超人了,我们就会忽略那个人类对象。如果一个人不是超人,我们就把人类物体转化为超人物体。理想情况下,我想在最后按年龄对它们进行排序,以便我得到按日期降序排列的超人列表。


根据您更新的问题:

List<Human> humans = ... // init 
List<SuperHuman> superHumans = ... // init

Set<Long> superHumanIds = superHumans.stream()
    .map(SuperHuman::getHumanId)
    .collect(toSet());

humans.stream()
    .filter(human -> superHumanIds.contains(human.getHumanId()))
    .map(this::convert)
    .forEach(superHumans::add);

superHumans.sort(Comparator.comparing(SuperHuman::getAge));

假设此类有另一个具有以下签名的方法:

private Superhuman convert(Human human) {
    // mapping logic
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java 8合并两个具有唯一id的列表中的对象 的相关文章

随机推荐