class Human {
Long humanId;
String name;
Long age;
}
class SuperHuman {
Long superHumanId;
Long humanId;
String name;
Long age;
}
Run Code Online (Sandbox Code Playgroud)
我有两个清单.人类名单和superHumans名单.我想从两个中创建一个单独的列表,确保如果一个人是超人,它只会在使用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));
Run Code Online (Sandbox Code Playgroud)
假设此类具有另一个具有以下签名的方法:
private Superhuman convert(Human human) {
// mapping logic
}
Run Code Online (Sandbox Code Playgroud)