在Java对象列表中显示一次重复的属性值

时间:2016-09-27 06:57:08

标签: java list java-8

我有一个java对象列表,如下所示

enter image description here

我想将其转换为“相机闪光灯故障”的列表。和相机外壳损坏'第一个对象只有一次,如下面的那个。

enter image description here

这里提到的解决方案有什么可以做的吗? Remove duplicates from a list of objects based on property in Java 8

2 个答案:

答案 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()));