java - 如何使用流 API 从 java 中的对象列表中删除重复项
问题描述
我已经搜索了如何使用 Stream API 从列表中删除重复项的解决方案
只发现这个问题 How to remove duplicates from list of objects by id
我有一个我需要按人名过滤的人员列表,尝试使用下面的代码段,但它没有按人名过滤
private static Map<Person, Integer> getUniqueByBiggerId(Collection<Person> persons) {
return persons.stream().collect(Collectors.toMap(
persons ->
persons,
Person::getId,
(id1, id2) -> {
if (id2 > id1)
return id2;
else
return id1;
}
));
}
public static void main(String args[]){
//.........
List<Person> Persons
= Arrays.asList(Person1, Person2,Person2,Person1,Person2, Person1);
getUniqueByBiggerId(Persons);
}
解决方案
您非常接近解决方案:
public class Test {
public static void main(String[] args) throws Exception {
List<Person> persons = Arrays.asList(new Person("a", 2), new Person("b", 1), new Person("a", 3));
persons = getUniqueByBiggerId(persons);
System.out.println(persons);
}
private static List<Person> getUniqueByBiggerId(Collection<Person> persons) {
return new ArrayList<>(
persons.stream().collect(Collectors.toMap(Person::getName, Function.identity(), (p1, p2) -> {
if (p1.getId() > p2.getId())
return p1;
else
return p2;
})).values());
}
}
record Person(String name, int id) {
public String getName() {
return name;
}
public int getId() {
return id;
}
}
输出:
[Person[name=a, id=3], Person[name=b, id=1]]
推荐阅读
- php - 如何在php中将类实例从一个类传递给模型类
- bpmn - Camunda 任务列表 - 如果分配给当前用户,则自动预览/打开用户任务
- flutter - 颤动时区添加数据库与终端不工作
- uml - 扩展应该总是写在用例场景中吗?
- discord - Discord.js v13,@discordjs/voice 播放音乐命令
- node.js - 是否可以使用 PDF.js 从 PDF 中提取多少图像以及它们是否具有替代文本、表格、交互式元素和页数?
- python - 使用logstash解析python日志
- python - Discord.py Bot - `if` 命令和`async def` 有什么区别?
- networking - Go-back-n,有一个 ACK 丢失和一个数据包丢失
- c# - 具有 N 列的二维数组中每列和原始的总和