Java8 List去重(单属性或组合属性)

Java:Set,Map,HashMap以及TreeSet 目录 Set 集合存储元素特点 Map常用方法以及如何遍历 遍历Map集合 HashMap HashMap 特点 哈希冲突 HashMap 底层实现原理(源码分析) 1.put()和get()的实现原理 2. 阈值与负载因子(JDK8) 3.扩容机制 4. 数组链表与红黑树的转换 HashMap 与 HashTable 的区别 TreeSet Set 集合存储元素特点 元素存取无序(无下标),不可重复即唯一 示例一:当存入重复元素时,该重复元素只会存入... 阅读详情
package com.demo.jdk8.collectors;
 
import com.google.common.collect.Lists;
import org.junit.jupiter.api.Test;
 
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
 
/**
 * @author Shanks
 * @date 2018-10-15
 */
public class CollectingAndThenTest {
 
    @Test
    void testCollectingAndThen() {
 
        UserOrder order0 = new UserOrder("年会", "张三", "box0001");
        UserOrder order1 = new UserOrder("婚庆", "张三", "box0002");
        UserOrder order2 = new UserOrder("旅游", "李四", "box0003");
        UserOrder order3 = new UserOrder("发布会", "张三", "box0002");
        UserOrder order4 = new UserOrder("旅游", "李四", "box0004");
 
        List<UserOrder> list = Lists.newArrayList(order0, order1, order2, order3, order4);
 
        System.out.println("=====>只根据单一属性photographerName进行去重");
        // <R, A> R collect(Collector<? super T, A, R> collector);
        // collectingAndThen(Collector<T, A, R> downstream, Function<R, RR> finisher)
        // toCollection(Supplier<C> collectionFactory)
        ArrayList<UserOrder> distinctByName = list.stream()
                .collect(
                        Collectors.collectingAndThen(
                                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(UserOrder::getPhotographerName))),
                                userOrders -> new ArrayList<>(userOrders)
                        )
                );
        distinctByName.forEach(System.out::println);
 
        System.out.println("=====>同时根据photographerName和deviceCode两个属性进行去重");
        ArrayList<UserOrder> distinctByNameAndCode = list.stream()
                .collect(
                        Collectors.collectingAndThen(
                                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(userOrder -> userOrder.getPhotographerName() + userOrder.getDeviceCode()))),
                                ArrayList::new
                        )
                );
        distinctByNameAndCode.forEach(System.out::println);
    }
}

打印结果:

=====>只根据单一属性photographerName进行去重
UserOrder{shootingTheme='年会', photographerName='张三', deviceCode='box0001'}
UserOrder{shootingTheme='旅游', photographerName='李四', deviceCode='box0003'}
 
=====>同时根据photographerName和deviceCode两个属性进行去重
UserOrder{shootingTheme='年会', photographerName='张三', deviceCode='box0001'}
UserOrder{shootingTheme='婚庆', photographerName='张三', deviceCode='box0002'}
UserOrder{shootingTheme='旅游', photographerName='李四', deviceCode='box0003'}
UserOrder{shootingTheme='旅游', photographerName='李四', deviceCode='box0004'}

实体类:

package com.demo.jdk8.collectors;
 
/**
 * @author Shanks
 * @date 2018-10-16
 */
public class UserOrder {
 
    /**
     * 拍摄主题
     */
    private String shootingTheme;
    /**
     * 摄影师
     */
    private String photographerName;
    /**
     * 设备编号
     */
    private String deviceCode;
 
    public UserOrder() {
    }
 
    public UserOrder(String shootingTheme, String photographerName, String deviceCode) {
        this.shootingTheme = shootingTheme;
        this.photographerName = photographerName;
        this.deviceCode = deviceCode;
    }
 
    @Override
    public String toString() {
        return "UserOrder{" +
                "shootingTheme='" + shootingTheme + '\'' +
                ", photographerName='" + photographerName + '\'' +
                ", deviceCode='" + deviceCode + '\'' +
                '}';
    }
 
    public String getShootingTheme() {
        return shootingTheme;
    }
 
    public void setShootingTheme(String shootingTheme) {
        this.shootingTheme = shootingTheme;
    }
 
    public String getPhotographerName() {
        return photographerName;
    }
 
    public void setPhotographerName(String photographerName) {
        this.photographerName = photographerName;
    }
 
    public String getDeviceCode() {
        return deviceCode;
    }
 
    public void setDeviceCode(String deviceCode) {
        this.deviceCode = deviceCode;
    }
}

 

list对象中如何根据对象中某个属性去重使用Java8流实现 在 Java 8 的流操作中,可以使用 distinct 方法来对一个对象流进行去重,但是默认情况下它会使用对象的 equals() 方法来判断重复。在上述示例中,我们首先使用 map 方法将对象映射成其 property 属性,然后使用 distinct 方法针对 property 进行去重,最后通过 collect 方法将结果收集到一个新的 List 对象中。如果你有一个包含实体类对象的列表,想要根据实体类的某个属性进行去重,你可以使用 Java 8 的流操作结合 lambda 表达式来实现。 阅读详情

相关推荐

沐数科技数据开发岗笔试题2025

与数据库中的主键(Primary Key)​有所不同,业务主键(Business Key)​是业务层面的唯一标识,通常由业务规则决定,例如,订单号、订单明细号,身份证号等。用户授信表(table_credit):包含用户ID(uid)、授信申请时间(credit_submit_time_local)、授信状态(credit_status)。:在正态分布中,大约68%的数据值落在距离均值一个标准差的范围内,约95%的数据值落在两个标准差的范围内,而约99.7%的数据值落在三个标准差的范围内。

weixin_40121264的博客 3525

java中把一个list转tree的三种方法——工具类

使用递归,双重for循环,map三种方式将普通lsit转换为tree结构

qq_46258463的博客 4611

Spine换装系统深度优化:从局部换肤到动态合批的进阶之路

本文深入探讨了Spine换装系统的性能优化策略,从局部换肤到动态合批的进阶技术。通过分析传统方案的性能瓶颈,提出动态合批、GPU Instancing等高级优化方法,显著降低Draw Call和内存占用,提升游戏性能。适用于MMO和大型游戏开发,帮助技术美术和工程师突破大规模换装场景的性能限制。

vulkan6gpu的博客 553

JAVA将List转为Tree树结构

JAVA将List转为Tree树结构

weixin_45399695的博客 2711

别再乱按F8了!Win10系统修复的正确姿势:用管理员CMD运行sfc /scannow

本文详细介绍了Windows 10系统修复的正确方法,重点推荐使用管理员CMD运行`sfc /scannow`命令。相比传统的F8键和重装系统,这一方法更高效且安全,能解决大多数系统文件损坏问题。文章还提供了管理员CMD的启动方式、sfc命令的完整参数解析以及实战故障排除流程图,帮助用户快速恢复系统健康。

weixin_29218963的博客 457

Flowable前端可视化配置动态审批人:告别硬编码,实现部门领导、项目经理自动分配

本文详细介绍了Flowable前端可视化配置动态审批人的全栈解决方案,通过表达式分配、监听器分配等动态审批人机制,实现从硬编码到智能分配的转变。文章提供了前端扩展bpmn-js设计器、后端动态解析实现方案及性能优化建议,帮助企业应对组织架构变动,提升审批流程的灵活性和效率。

weixin_30352645的博客 471

List对象集合的操作

List对象集合的操作 一、List集合 List list = new ArrayList(); list集合不能为空 去重 list = list.stream().distinct().collect(Collectors.toList()); 排序 (1)升序排列 Collections.sort(list); (2)倒序排列 Collections.reverse(list); (3)自定义排序 Collections.sort(list, new Comparator()

u012374512的博客 3184

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试

前面CODESY下载安装并熟悉了,p-net搭建从站也已经跑在虚拟机树莓派上了,我们只需要快速搭建一个profinet主站来和从站进行交互即可,这里我们直接用Windows下带的软PLC搭建profinet主站并和p-net的demo从站程序进行IO交互。评估是否进行Windows下的运行时PLC前先看一下注意事项,Windows下安装配置会需要修改boot及防火墙等,可能会影响Windows电脑的正常使用,所以创建项目时的设备可以选择非RTE的。

逍遥游的博客 7312

List集合对象去重及按属性去重的8种方法

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。 总结java中创建并写文件的5种方式 总结java从文件中读取数据的6种方法 总结java创建文件夹的4种方法及其优缺点 总结java中删除文件或文件夹的7种方法 总结java中文件拷贝剪切的5种方式 比如之前我已经写了上面的这些内容,如果对java基础知识.

字母哥博客 3万+

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1731

物联网竞赛单片机应用开发-项目汇总

物联网竞赛单片机应用开发-项目汇总

a6662580的博客 9003

Java中List集合对象去重及按属性去重的8种方法

一、本文描述 这一篇文章写一下List集合元素去重的8种方法,实际上通过灵活的运用、排列组合不一定是8种,可能有18种方法。 对象元素整体去重的4种方法 按照对象属性去重的4种方法 为了在下文中进行测试内容讲解,我们先做一些初始化数据 public class ListRmDuplicate { private List<String> list; private List<Player> playerList; @BeforeEach public void set

lck_csdn的博客 4万+

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs)

中国60个城市的1 km分辨率城市冠层参数(UCPs)

WW、forever的博客 1063

关于java的List集合对象去重及按属性去重的8种方法

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。 总结java中创建并写文件的5种方式 总结java从文件中读取数据的6种方法 总结java创建文件夹的4种方法及其优缺点 总结java中删除文件或文件夹的7种方法 总结java中文件拷贝剪切的5种方式 比如之前我已经写了上面的这些内容,如果对java基础知识总结

gg7894125的博客 4325

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java8 list多属性去重

在实际开发中,我们常常遇到一个业务场景:有一个 List 集合,其中包含了多个对象,需要根据对象中某个或者某些属性来进行去重操作,以确保 List 中的元素在这些属性的组合下唯一。在 Java 8 中,Stream API 为我我们提供了一些便捷的操作,使得在开发中,效率有所提升。

清晨qc的博客 3470

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JDK8 List集合去重示例

一、根据对象中属性去重 /** * java8 list<java bean>去重 */ @Test public void listRemoveDuplication() { List<User> users = new ArrayList<>(); users.add(new User(1L, "aa", "aa")); users.add(new User(1L, "aa", "bb

我这孩子从小记性就不好,什么东西都要写下来才放心 5587

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java list 对象 属性_Java中List集合对象去重及按属性去重的8种方法

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。总结java中创建并写文件的5种方式总结java从文件中读取数据的6种方法总结java创建文件夹的4种方法及其优缺点总结java中删除文件或文件夹的7种方...

weixin_33217004的博客 1564

java new list 对象_Java中List集合对象去重及按属性去重的8种方法

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。总结java中创建并写文件的5种方式总结java从文件中读取数据的6种方法总结java创建文件夹的4种方法及其优缺点总结java中删除文件或文件夹的7种方...

weixin_30517215的博客 4946

list对象去重以及按照对象属性去重。大佬牛逼。记录一下

List集合对象去重及按属性去重的8种方法 - 发哥讲Java - 博客园 一、本文梗概 这一篇文章我想写一下List集合元素去重的8种方法,实际上通过灵活的运用、排列组合不一定是8种,可能有18种方法。 对象元素整体去重的4种方法 按照对象属性去重的4种方法 为了在下文中进行测试内容讲解,我们先做一些初始化数据 public class ListRmDuplicate { private List<String> list; private List<Player&g

qq_45603086的博客 3644

java中list的对象_Java中List集合对象去重及按属性去重的8种方法

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。总结java中创建并写文件的5种方式总结java从文件中读取数据的6种方法总结java创建文件夹的4种方法及其优缺点总结java中删除文件或文件夹的7种...

weixin_39957027的博客 1059

用java8对list按照多个字段进行去重

现在有一个实体类Person,属性有三个,分别是name,age,address,根据这三个属性将list<Person>中三个字段都相同的数据进行去重。 //创建list,添加数据 List<Person> list = new ArrayList<>(); list.add(new Person("Tom", 15, "Am...

robotfive的博客 1万+

distinct去重多个字段_List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。 总结java中创建并写文件的5种方式 总结java从文件中读取数据的6种方法 总结java创建文件夹的4种方法及其优缺点 总结java中删除文件或文件...

weixin_39726873的博客 1115
上一篇: redis通过key模糊删除,批量删除,批量查询,批量GET,批量设置相关数据
下一篇: java正则只允许输入1或2一位数字(其他数字自行修改即可)
Chery Qi
博客等级 码龄10年 154粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值