Java8 list多属性去重

这篇具有很好参考价值的文章主要介绍了Java8 list多属性去重。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇博客将深入探讨如何使用 Java 8 的 Stream API 来实现 List 多属性去重。

前言

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

list 多属性去重

创建一个 RequestDto 类,包含了姓名(name)、 id(主键)、状态(status)三个属性。我们的目标是根据姓名、id和状态这三个属性来对List 进行去重操作。

RequestDto 类:

@Data
public class RequestDto {
    private String name; // 姓名
    private String id; // id
    private String status; // 状态
}

使用stream Api 进行去重,我们先创建一些对象集合:

package com.yin.demo.controller;

import lombok.Data;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;


@Data
public class RequestDto {
    private String name;
    private String id;
    private String status;
}

class demo {
    public static void main(String[] args) {
        List<RequestDto> li = new ArrayList<>();
        RequestDto dto1 = new RequestDto();
        dto1.setId("1");
        dto1.setName("张三");
        dto1.setStatus("1");
        li.add(dto1);

        RequestDto dto2 = new RequestDto();
        dto2.setId("1");
        dto2.setName("张三");
        dto2.setStatus("1");
        li.add(dto2);

        RequestDto dto3 = new RequestDto();
        dto3.setId("1");
        dto3.setName("李四");
        dto3.setStatus("1");
        li.add(dto3);

//        ArrayList<RequestDto> result = li.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
//                () -> new TreeSet<>(Comparator.comparing(o -> o.getId() + o.getName() + o.getStatus()))), ArrayList::new));

        System.out.println(li);

    }
}

打印集合如下:

Java8 list多属性去重,Java集合,list,java,集合,map,distinct,java8,数据结构

使用java8 Stream API进行去重
class demo {
    public static void main(String[] args) {
        List<RequestDto> li = new ArrayList<>();
        RequestDto dto1 = new RequestDto();
        dto1.setId("1");
        dto1.setName("张三");
        dto1.setStatus("1");
        li.add(dto1);

        RequestDto dto2 = new RequestDto();
        dto2.setId("1");
        dto2.setName("张三");
        dto2.setStatus("1");
        li.add(dto2);

        RequestDto dto3 = new RequestDto();
        dto3.setId("1");
        dto3.setName("李四");
        dto3.setStatus("1");
        li.add(dto3);
        
        // java8 Stream 流去重操作通过对属性id、name、status进行去重
        ArrayList<RequestDto> result = li.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(o -> o.getId() + o.getName() + o.getStatus()))), ArrayList::new));

        System.out.println(result);

    }
}

结果如下:可以看出已经成功去重

Java8 list多属性去重,Java集合,list,java,集合,map,distinct,java8,数据结构

根据list中Object某个属性去重

利用 TreeSet 通过 comparing 指定某个属性来去重,例如根据name属性去重

// 核心代码如下,其实就是上面的多属性去重只用到了一个属性
// java8 Stream 流去重操作
        ArrayList<RequestDto> result = li.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(o -> o.getName()))), ArrayList::new));

结果打印如下:

Java8 list多属性去重,Java集合,list,java,集合,map,distinct,java8,数据结构

distinct对某个属性去重

根据对象的某个属性去重,对属性分组后进行 distinct 操作:返回的是去重后的属性集合

// 核心代码如下,返回的是属性
// java8 Stream 流去重操作
        List<String> result = li.stream().map(RequestDto::getName).distinct().collect(Collectors.toList());

打印结果如下:

Java8 list多属性去重,Java集合,list,java,集合,map,distinct,java8,数据结构

distinct对集合去重

// 核心代码如下,返回的是对象
// java8 Stream 流去重操作
        List<RequestDto> result = li.stream().distinct().collect(Collectors.toList());

打印结果如下:

Java8 list多属性去重,Java集合,list,java,集合,map,distinct,java8,数据结构

通过利用 Java 8 的 Stream API,我们可以轻松地实现List多属性去重!文章来源地址https://www.toymoban.com/news/detail-627207.html

到了这里,关于Java8 list多属性去重的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • list对象中如何根据对象中某个属性去重使用Java8流实现

    在 Java 8 的流操作中,可以使用 distinct 方法来对一个对象流进行去重,但是默认情况下它会使用对象的 equals() 方法来判断重复。如果你希望根据对象的某个属性进行去重,则可以使用 distinct 方法结合 map 方法来实现。 下面是一个示例代码,假设你有一个 List 对象 list,其中包

    2024年02月11日
    浏览(54)
  • java8集合操作(排序、取交集、并集、差集、去重并集)分组

    一、List集合转换成Set集合 Set@NotNull Long ids =entityList.stream().filter(e - e != null).map(UserCopyPointEntity::getPointId).collect(Collectors.toSet()); 二、集合map的循环 map.forEach((k, v) - { System.out.println(k + \\\"----\\\" + v); }); 三、集合排序,名称排序,顺序排序 if (result.size() 0) { // 楼层排序, 从小到大排序

    2024年02月16日
    浏览(51)
  • java8 列表通过 stream流 根据对象属性去重的三种实现方法

    0、User对象 1、使用filter进行去重 测试 ①、疑惑 既然 filter 里面调用的是 distinctPredicate 方法,而该方法每次都 new 一个新的 map 对象,那么 map 就是新的,怎么能做到可以过滤呢 ②、解惑 先看一下 filter 的部分实现逻辑,他使用了函数式接口 Predicate ,每次调用filter时,会使用

    2024年01月20日
    浏览(108)
  • Java8 List集合如何指定打印分隔符

    背景 无论是在学习还是日常的应用开发过程中,我们经常会需要使用分隔符将 List 集合打印出来。 如下所示: 执行结果如下: 如果我们想在打印的时候不打印 [] ,然后将分隔符换成 、 顿号,应该怎么操作呢? 其实有两种方法可以实现: 方法一:String.join(推荐) String

    2024年02月10日
    浏览(55)
  • Java8特性,Stream流的使用,收集成为map集合

    Java 8引入了Stream API,这是Java集合操作的一个重大改进。Stream API提供了一种高效且易于使用的处理数据的方式。 Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。注意:Stream自己不会存储元素,它不会改变源对象,反而它的操作会返回一个全新的Strea

    2024年04月22日
    浏览(82)
  • 【java】List对象集合去除特定对象的优雅写法(基于java8)

    【java】List对象集合去除特定对象的优雅写法(基于java8) 主要用的是 Java List.removeIf方法,该方法用于删除所有满足特定条件的数组元素,入参其实是一个布尔值的表达式即可。 使用场景,用户类中的性别字段有三个,分别是男、女、未知。 当前端要查询:“男”时,要求

    2024年02月16日
    浏览(50)
  • Java8对List集合中的数据进行过滤处理

    目录 0.需求场景 1.编码实现         假设有这样一个需求,将List中所有超过 35 岁的员工剔除,该如何实现呢?我们可以利用 Java8 的流式编程,轻松的实现这个需求。         当然也不局限与上述场景,对应的处理方法适用与根据 List 中元素或元素的属性,对 List 进行处

    2024年02月15日
    浏览(59)
  • 【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

    本篇主要说明在Java8及以上版本中,使用stream().filter()来过滤List对象,查找符合条件的集合。 集合对象以学生类(Student)为例,有学生的基本信息,包括:姓名,性别,年龄,身高,生日几项。 我的学生类代码如下: 下面来添加一些测试用的数据,代码如下: 添加过滤条件

    2024年02月12日
    浏览(67)
  • Java8 Stream流List<JSONObject>通过某一属性进行排序

    List对象 1.首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。 2.使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。 3.Comparator.comparing()里面的内容,也是就是Object::getter,例如Test::getName 4.最后格式化为需要的格式

    2024年02月12日
    浏览(61)
  • Java8使用stream流给List<Map<String,Object>>分组(多字段key)

    Java8使用 stream流 给ListMapString,Object根据字段key 分组 一、项目场景: 从已得到的List集合中,根据某一元素(这里指map的key)进行分组,筛选出需要的数据。 如果是SQL的话则使用 group by 直接实现,代码的方式则如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代码实现 1、首

    2024年02月02日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包