java8特性--list集合根據多個欄位去重
阿新 • • 發佈:2019-02-10
專案需求描述 |
出於專案需要,有一個list,實體包含多個欄位,當其中兩個欄位相同均相同時,就認為list中的兩條記錄是一樣的,本來想通過分組實現,java8的分組只提供根據一個欄位分組,只好另尋他路,java8有一個collectingAndThen可以根據多個欄位去重,因為我們的需求是可以去重之後操作,因此採用這種方式。
分組及去重 |
- 分組
classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));
- java8去重(根據年級和專業,當年級和專業都相同的情況下看做是重複資料)
List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));
- 通過hashSet去重(如將classNames去重):該種去重是bean完全相同的時候算重複資料
List <String> classNameList = new ArrayList(new HashSet(classNames));