前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >集合去重 (集合元素为引用类型)--- java 8 新特性 --- 根据元素单属性、多属性实现去重

集合去重 (集合元素为引用类型)--- java 8 新特性 --- 根据元素单属性、多属性实现去重

作者头像
微风-- 轻许--
发布于 2022-04-13 07:56:45
发布于 2022-04-13 07:56:45
63900
代码可运行
举报
文章被收录于专栏:java 微风java 微风
运行总次数:0
代码可运行

1. 代码写法: (要求 JDK 1.8 或 1.8 以上)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package gentle.entity;

import lombok.Data; 

/**
 *
 * @author silence
 * @date 2018/7/6 10:58
 */
@Data // 此注解可自动生成set/get、自动重写equals/hashcode 等,不用在代码中书写相关代码。

public class User {

    private String name;
    private int age;

    public User( String name, int age) {
        this.name = name;
        this.age = age;
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  /**
     *  for循环
     * @param list
     * @param <T>
     */
    public static <T> void listFor(List<T> list) {
        list.forEach(each -> System.out.print(each+" "));
    }

  

    /**
     * 按对象属性去重
     *
     * @return
     */
    public static List<User> deleteSameByOne(List<User> users) {

        // 1.单个属性去重
        return users.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getAge))),
                ArrayList::new));
    }

    /**
     * 按对象属性去重
     *
     * @return
     */
    public static List<User> deleteSameByMany(List<User> users) {

        // 2.多属性去重:把多个属性拼起来( 本质上还是单属性去重 )
        return users.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(
                        Comparator.comparing(userDep -> userDep.getName() + userDep.getAge()))),
                ArrayList::new));
    }



  /**
     * 基本数据类型去重
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> List<T> deleteSame(List<T> list) {
        return list.stream().distinct().collect(Collectors.toList());
    }

2. 测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        List<User> userList = new ArrayList<User>(){{add(new User("花间",24));}
                                                     {add(new User("暮云",28));}
                                                     {add(new User("暮云",28));}
                                                     {add(new User("彻风",24));}
                                                     {add(new User("弥禁",16));}
                                                     {add(new User("清寞",24));}};


        
        System.out.println("去掉同龄的:\n"+deleteSameByOne(userList));
        System.out.println("去掉同龄且同名的:\n"+deleteSameByMany(userList));

3. 运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
stream 流的使用技巧总结,这些你必须知道
我们都知道Stream,是jdk8的一大新特性,极大的提高了道友们的开发效率(用过的道友都知道的),也使我们的代码看起来也更加地简洁,但Stream中除了Lambda表达式,另一块就是函数编程了,这块对于刚开始使用Stream的道友们来说,就得开始头疼抓狂了;别担心,下面我们就来总结一下常用技巧。
前端小tips
2021/11/28
3910
stream 流的使用技巧总结,这些你必须知道
工作经验|lambada处理集合的常用10种实战骚操作,我都记录下来了
最近在项目上面经常使用lambada表达式,但是总是记不住,一直都在百度,写完之后就忘记了,感觉很费时间;这次就花点时间,把一些常用的lambada 处理集合的实例都保存了下来(去重,分组,求和,list转map等等),以后就不用到处找了,刚好也可以给同学们分享下;另外也把一些关于使用lambada时遇到的坑也给大家一起分享下,所有代码拿来即用!!!本文档持续更新...
AI码师
2021/02/03
6120
工作经验|lambada处理集合的常用10种实战骚操作,我都记录下来了
Java8编程小技巧,提高代码效率100%!超级实用!
大家好,我是小义,今天分享几个Java8编程小技巧,提高代码逼格,写出优雅代码,让同事看了也直呼内行。
程序员小义
2024/05/20
1870
Java8编程小技巧,提高代码效率100%!超级实用!
Java8的List Object 去重
假设Object为User,此处User类中省略getting/setting以及相关构造方法。
WindCoder
2020/01/21
1.9K0
List对象去重及按属性去重的8种方法-java基础总结第六篇
最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。
字母哥博客
2020/09/23
8.1K0
List对象去重及按属性去重的8种方法-java基础总结第六篇
Java常用工具类2 - 崔笑颜的博客
方法一:简单粗暴,直接使用copy(),如果目标存在,先使用delete()删除,再复制;
崔笑颜
2021/02/02
4820
Java 集合去重
例如:不重写 equals 方法的情况下,根据 Employee 的 id 字段进行去重处理
Power
2025/04/03
380
Stream流用于按照对象中某一属性来对集合去重+简单数据类型集合的去重
上次对Stream流来进行分组的文章很多人看,想看的可以来这: Stream流来进行集合分组 这次小编又带来Stream的去重,话不多数,直接上代码:
掉发的小王
2022/07/11
1.6K0
阿里字节技术大佬都在用的List集合去重方案!
碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素。
JavaEdge
2021/12/07
2680
阿里字节技术大佬都在用的List集合去重方案!
使用 Java8的 stream对list数据去重,使用filter()过滤列表,list转map「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141093.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
4.1K0
Java中的对象去重工具类——灵活、高效的去重解决方案
在日常开发中,我们经常会遇到需要对对象列表进行去重的需求。比如,从数据库中查询出一批用户数据,但其中可能存在重复记录,我们需要根据某些字段(如姓名、年龄等)来去除重复项。今天,我将分享一个非常实用的Java工具类——DeduplicationUtils,它可以帮助我们轻松实现基于对象字段的灵活去重。
訾博ZiBo
2025/01/24
750
Java8 Stream 中 Collectors 的24个操作
Collectors,可以说是Java8的最常用操作了,用来实现对队列的各种操作,包括:分组、聚合等,官方描述是:
用户4396583
2024/08/13
1210
List Stream 的常规用法
// 遍历后判断赋给另一个List集合,保持原来顺序 public static void ridRepeat1(List<String> list) { System.out.println("list = [" + list + "]"); List<String> listNew = new ArrayList<String>(); for (String str : list) { if (!listNew.contains(str)) { listNew.add(str); } } System.out.println("listNew = [" + listNew + "]"); }
小马哥学JAVA
2022/11/21
4350
lambda
List<BigDecimal> lis = new ArrayList<BigDecimal>();
用户6019926
2024/01/04
1300
Java 集合数据处理技巧:使用 Stream API 实现多种操作
在处理 List 数据时,有时需要根据对象的某个属性进行去重。可以使用 TreeSet 和 Stream 来实现这一功能。以下是示例代码:
小码农薛尧
2025/02/26
1790
Java 集合数据处理技巧:使用 Stream API 实现多种操作
Java8 用 Stream 快速实现List转Map 、分组、过滤等操作
这篇文章主要介绍了java8快速实现List转map 、分组、过滤等操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
搜云库技术团队
2020/09/01
25.4K0
拥抱JAVA
2、获取当前时间,SimpleDateFormat 不是线程安全的,在多线程环境会有并发安全问题,DateFormatUtils是线程安全的
adu
2022/10/30
3070
Lambda表达式和函数式编程
迭代器内第一个参数为初始值,第二个参数为一个lambda表达式,因为这个循环是个死循环所以这边limit了前10个元素
后端码匠
2021/04/02
1.3K0
Java8特性大全(最新版)
随着对 Java8 新特性理解的深入,会被 Lambda 表达式(包含方法引用)、流式运算的美所迷恋,不由惊叹框架设计的美。
赛先生和泰先生
2022/01/19
2.1K1
Java8特性大全(最新版)
4.2.Java8 Stream简单的应用
        元素序列:像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序值,因为集合是数据结构,所以他的主要目的是以特定的时间/空间复杂度存储和访问元素,但流的目的在于表达计算。集合讲的是数据,流讲的是计算。
itjim
2019/11/22
7550
4.2.Java8 Stream简单的应用
推荐阅读
相关推荐
stream 流的使用技巧总结,这些你必须知道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验