我有一个java对象列表,如下所示
我想将其转换为“相机闪光灯故障”的列表。和相机外壳损坏'第一个对象只有一次,如下面的那个。
这里提到的解决方案有什么可以做的吗? Remove duplicates from a list of objects based on property in Java 8
答案 0 :(得分:1)
您可以将所有属性添加到Set
(设置不允许重复),如果该值已在集合中,则方法add
将返回false,因此您可以设置清空对象中的属性:
Set<String> values = new HashSet<>();
for (MyObject obj : myList) {
if (!values.add(obj.getValue())) {
obj.setValue("");
}
}
另一种方法是使用相同的属性值对所有对象进行分组,然后跳过每个组的第一个元素,并为该组中的所有其他对象设置属性值为空:
myList.stream()
.collect(Collectors.groupingBy(MyObject::getValue))
.forEach((k, v) -> v.stream().skip(1).forEach(o->o.setValue("")));
答案 1 :(得分:0)
我正在举例Employee
,它有一些重复的ID。
假设您有一个列表
List<Employee> employee
将它们添加到HashSet
,这不允许重复。
HashSet<Object> seen=new HashSet<>();
employee.removeIf(e->!seen.add(e.getID()));