首页 > 编程语言 >如何实现java8 list按照元素的某个字段去重

如何实现java8 list按照元素的某个字段去重

时间:2023-05-24 10:57:50浏览次数:46  
标签:list add 字段 Student keyExtractor new java8 studentList

list 按照元素的某个字段去重

1 2 3 4 5 6 7 @Data @AllArgsConstructor @NoArgsConstructor public class Student { private Integer age; private String name; }

测试数据

1 2 3 4 5 List<Student> studentList = Lists.newArrayList(); studentList.add(new Student(28, "river")); studentList.add(new Student(12, "lucy")); studentList.add(new Student(33, "frank")); studentList.add(new Student(33, "lucy"));

java8 通过tree set 去重

1 2 3 4 5 6 7 8 List<Student> studentDistinctList = studentList.stream() .collect(Collectors.collectingAndThen (Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(t -> t.getName()))), ArrayList::new ) ); System.out.println(new Gson().toJson(studentDistinctList));

扩展distinct 方法去重

1 2 3 List<Student> studentDistinct2List = studentList.stream().filter(StreamUtil.distinctByKey(t->t.getName())) .collect(Collectors.toList()); System.out.println(new Gson().toJson(studentDistinct2List));

工具类

1 2 3 4 5 6 7 8 9 10 11 12 public class StreamUtil { /** * https://stackoverflow.com/questions/23699371/java-8-distinct-by-property * @param keyExtractor * @param <T> * @return */ public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); } }

标签:list,add,字段,Student,keyExtractor,new,java8,studentList
From: https://www.cnblogs.com/zxy-come-on/p/17427343.html

相关文章

  • kettle 连接oracle 12c以上数据库报错 ORA-12505, TNS:listener does not currently k
    在通过kettle连接oracle数据库时报错,但通过plsql是能正常连接的,ORA-12505,TNS:listenerdoesnotcurrentlyknowofSIDgiveninconnectdescriptororg.pentaho.di.core.exception.KettleDatabaseException:来看oracle数据库版本select*fromv$version;连接oracle12c以......
  • SpringBoot中操作Redis解析JsonArray数据为对象List(ruoyi字典值sys_dict为例)
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662在上面搭建系统的基础上,会将系统的字典值缓存进redis中。看数据格式存储的是Json数组,如何从redis中读取并解析成对象的list从而进行数据处理。注......
  • Python中对列表list去重
    保留原顺序。old_list=[2,3,4,5,1,2,3]new_list=[]foriinold_list:ifinotinnew_list:new_list.append(i)print(new_list)#[2,3,4,5,1]用字典dict去重使用list项作为键创建dict,这将自动删除任何重复项,因为dict不能有重复的键,保留原......
  • 2)MySQL表管理之创建删除、约束实施、自增长字段、复制表结构
    一、表操作:创建表:createtabletablename(字段名1数据类型,...字段名n数据类型);查看当前数据库中所有表:showtables;查看指定表的结构:desc[ribe]table_name;查看指定表的详细信息:showcreatetabletable_name;......
  • list转换成树形结构
    importcn.hutool.core.collection.CollectionUtil;importcn.hutool.core.util.StrUtil;importcn.hutool.json.JSONUtil;importcom.alibaba.fastjson.JSON;importorg.springframework.stereotype.Component;importjava.lang.reflect.Field;importjava.util.Array......
  • Java开发笔记之将一个List拷贝到另一个List的问题
    0x00概述在对List数据进行不同的数据操作的时候,例如分支1将List按照A来排序,分支2将List按照B来排序,需要将List进行数据层面的拷贝; 0x01错误的操作仅仅是List的引用,并没拷贝List内的数据进行处理List<String>list1=newArrayList<>();List<String>list2=newArrayL......
  • 对已有的表字段修改设置默认值,会影响原来数据中为null的字段数据吗?
    1.新建表t_userCREATETABLE`t_user`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`name`varchar(100)NOTNULL,`age`int(11)NOTNULL,`male`varchar(100)NOTNULL,`height`int(11)NOTNULL,`if_delete`tinyint(1),PRIMARYKEY(`id`))ENGINE......
  • Flutter一天一控件之ListTile
    ListTile简介Flutter中的ListTile控件是一种常用的列表项控件,它可以用于显示列表中的每一个项,通常包含标题、副标题、图标等内容。ListTile控件的外观和行为类似于Android中的ListView中的列表项。一个简单的ListTile示例:ListTile(leading:Icon(Icons.person),//左侧图标......
  • 学习笔记-Java8新特性-第四节-StreamAPI
    StreamAPI利用StreamAPI可以像流水线一样操作处理数据源(数组、集合……)Stream自己不会存储元素Stream不会改变数据源,而是会返回一个持有处理结构的新StreamSteam操作时延迟执行的,他们会等到需要结果的时候才执行称为惰性求值Stream操作的三个步骤创建Stream......
  • 学习笔记-Java8新特性-第五节-Optional类
    Optional类Optional<T>是一个容器类代表一个值存在或不存在致力于解决空指针异常问题(NPE)可以快速锁定发生NPE的位置(这东西真的好用吗?)常用方法Optional.of(Tt)创建一个Optional实例不能传入空指针,会报NPE使用Optional,报空指针了,说明就是这里的问题?......