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(使用前将#替换为@)