如何实现java8 list按照元素的某个字段去重
list按照元素的某个字段去重
@Data @AllArgsConstructor @NoArgsConstructor publicclassStudent{ privateIntegerage; privateStringname; }
测试数据
ListstudentList=Lists.newArrayList(); studentList.add(newStudent(28,"river")); studentList.add(newStudent(12,"lucy")); studentList.add(newStudent(33,"frank")); studentList.add(newStudent(33,"lucy"));
java8通过treeset去重
ListstudentDistinctList=studentList.stream() .collect(Collectors.collectingAndThen (Collectors.toCollection(()-> newTreeSet<>(Comparator.comparing(t->t.getName()))), ArrayList::new ) ); System.out.println(newGson().toJson(studentDistinctList));
扩展distinct方法去重
ListstudentDistinct2List=studentList.stream().filter(StreamUtil.distinctByKey(t->t.getName())) .collect(Collectors.toList()); System.out.println(newGson().toJson(studentDistinct2List));
工具类
publicclassStreamUtil{ /** *https://stackoverflow.com/questions/23699371/java-8-distinct-by-property *@paramkeyExtractor *@param*@return */ publicstatic Predicate distinctByKey(FunctionkeyExtractor){ Set
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。