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

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

項目需求描述

出於項目須要,有一個list,實體包含多個字段,當其中兩個字段相同均相同時,就認爲list中的兩條記錄是同樣的,原本想經過分組實現,java8的分組只提供根據一個字段分組,只好另尋他路,java8有一個collectingAndThen能夠根據多個字段去重,由於咱們的需求是能夠去重以後操做,所以採用這種方式。

分組及去重

  • 分組
  
  
  
  
  • 1
classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));
  • java8去重(根據年級和專業,當年級和專業都相同的狀況下看作是重複數據)
  
  
  
  
  • 1
List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));
  • 經過hashSet去重(如將classNames去重):該種去重是bean徹底相同的時候算重複數據
  
  
  
  
  • 1
  • 2
List<String> classNameList = new ArrayList(new HashSet(classNames));
相關文章
相關標籤/搜索