3 回答

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
直接在列表中執(zhí)行此操作的最簡(jiǎn)單方法是
HashSet<Object> seen=new HashSet<>();
employee.removeIf(e->!seen.add(e.getID()));
removeIf 如果符合指定條件,將刪除一個(gè)元素
Set.addfalse如果未修改Set,則將返回,即已經(jīng)包含該值
結(jié)合這兩個(gè),它將刪除之前遇到ID的所有元素(員工)
當(dāng)然,僅當(dāng)列表支持刪除元素時(shí),它才有效。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果可以使用equals,則可以distinct在流中使用過(guò)濾列表(請(qǐng)參見(jiàn)上面的答案)。如果您不能或不想重寫(xiě)該equals方法,則可以 filter通過(guò)以下方式對(duì)任何屬性(例如,屬性名稱(與屬性ID等相同))進(jìn)行流處理:
Set<String> nameSet = new HashSet<>();
List<Employee> employeesDistinctByName = employees.stream()
.filter(e -> nameSet.add(e.getName()))
.collect(Collectors.toList());
添加回答
舉報(bào)