java8 list中根據對象多屬性去重


強烈推薦一個大神的人工智能的教程:http://www.captainbed.net/zhanghan
原文地址:https://blog.csdn.net/zh15732621679/article/details/80483617

項目需求描述

出於項目需要,有一個list,實體包含多個字段,當其中兩個字段相同均相同時,就認為list中的兩條記錄是一樣的,本來想通過分組實現,java8的分組只提供根據一個字段分組,只好另尋他路,java8有一個collectingAndThen可以根據多個字段去重,因為我們的需求是可以去重之后操作,因此采用這種方式。

分組及去重

  • 分組
classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));

   
   
   
           
  • 1
  • java8去重(根據年級和專業,當年級和專業都相同的情況下看做是重復數據)
List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));

   
   
   
           
  • 1
  • 通過hashSet去重(如將classNames去重):該種去重是bean完全相同的時候算重復數據
List<String> classNameList = new ArrayList(new HashSet(classNames));

   
   
   
           
  • 1
  • 2
                                </div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM