首页 > 解决方案 > Java 8 过滤列表中的重复对象

问题描述

我有一个数组列表:

List<EmpData> data;

class Emp {

    Integer id;
    String department;
    String action;

    // getters and setters
}

我得到的数据如下:

1, Food, Add
1, Food, Remove
2, Food, Add
2, Auto, Remove
3, Electric, Add
3, Electric, Remove
3, Food, Remove

我想删除 id & department 相同的所有记录。

那是对于 EmpId 1there & department food,有 2 条记录,所以删除它们。

这样,结果列表将仅包含:

2, Food, Add
2, Auto, Remove
3, Food, Remove

如何在 java 8 中过滤这个列表?

标签: javajava-stream

解决方案


好吧,您可以对其进行排序,然后删除所有后续内容:

var sorted = list.stream().sort(Comparator.comparing(EmpData::getId).thenComparing(EmpData::getDepartment)).collect(Collectors.toList());

for(int i = 0; i < sorted.size() - 1; i++){
   var next = sorted.at( i + 1 );
   var current = sorted.at( i );
   if(current.getId().equals(next.getId()) && current.getDepartment().equals(next.getDepartment())){
      sorted.remove(i);
      i--; // check for next element
   }
}

推荐阅读