Java8 Stream流根据多个字段去重

 更新时间:2022年05月06日 11:22:36   作者:某科学的南条  
这篇文章主要介绍了Java8 Stream流根据多个字段去重,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Stream流根据多个字段去重

分组

list.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));

java8有一个collectingAndThen可以根据多个字段去重

list.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));

通过hashSet去重:

该种去重是bean完全相同的时候算重复数据

List<String> classNameList = new ArrayList(new HashSet(list));

Stream多字段去重,去重求和

stream进行list的循环遍历。

conver的String由去重条件组成,中间用下划线或特殊字符分割 

代码如下:

完整demo如下

附带测试结果

class User { 
    private int id;
    private String name;
    private Integer record; 
    public User() {
    }
 
    public User(int id,String name, Integer record) {
    }
 
    public int getId() { 
        return id;
    }
 
    public void setId(int id) { 
        this.id = id;
    }
 
    public String getName() { 
        return name;
    }
 
    public void setName(String name) { 
        this.name = name;
    }
 
    public Integer getRecord() { 
        return record;
    }
 
    public void setRecord(Integer record) { 
        this.record = record;
    }
 
}

启动主函数

public class Main {
    public static void main(String[] args) {
    List<User> users = new ArrayList<>();
    User user1 = new User();
        user1.setId(1);
        user1.setName("小明");
        user1.setRecord(50);
        users.add(user1);
    User user2 = new User();
        user2.setId(1);
        user2.setName("小明");
        user2.setRecord(60);
        users.add(user2);
    User user3 = new User();
        user3.setId(2);
        user3.setName("小华");
        user3.setRecord(70);
        users.add(user3);
    User user4 = new User();
        user4.setId(2);
        user4.setName("小华");
        user4.setRecord(80);
        users.add(user4);
    User user5 = new User();
        user5.setId(3);
        user5.setName("小芳");
        user5.setRecord(100);
        users.add(user5);
 
        Map<String, Integer> conver = new HashMap();
        users.stream().forEach(x -> {
            String cKey = x.getId()+"_"+x.getName();
            if (!conver.containsKey(cKey)) {
                conver.put(cKey, x.getRecord());
            } else {
                Integer temp = conver.get(cKey);
                conver.put(cKey, (null == temp ? 0 : temp) + (null == x.getRecord() ? 0 : x.getRecord()));
            }
        });
        System.out.println(conver.size());
        for(Map.Entry<String, Integer> entry:conver.entrySet()){
            System.out.println("key:"+entry.getKey()+","+"value:"+entry.getValue());
        }
    }
}

运行结果如下:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java操作minio删除文件夹及其文件方法(MinIO基本使用)

    Java操作minio删除文件夹及其文件方法(MinIO基本使用)

    MinIO是一个高性能、无限扩展的开源对象存储服务器,它以对象的形式存储数据,并兼容Amazon S3接口,它适用于大规模数据存储、大数据分析、文件共享和备份等应用场景,这篇文章主要介绍了java操作minio删除文件夹及其文件方法,需要的朋友可以参考下
    2024-02-02
  • 基于Properties实现配置数据库驱动

    基于Properties实现配置数据库驱动

    这篇文章主要介绍了基于Properties实现配置数据库驱动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • MyBatis后端对数据库进行增删改查等操作实例

    MyBatis后端对数据库进行增删改查等操作实例

    Mybatis是appach下开源的一款持久层框架,通过xml与java文件的紧密配合,避免了JDBC所带来的一系列问题,下面这篇文章主要给大家介绍了关于MyBatis后端对数据库进行增删改查等操作的相关资料,需要的朋友可以参考下
    2022-08-08
  • Java compareTo用法详解

    Java compareTo用法详解

    在Java编程中,有时候我们需要对对象进行比较和排序,为了实现这一目标,Java提供了一个非常有用的接口叫做Comparable,以及一个重要的方法compareTo,下面我们就来看看compareTo的具体用法吧
    2023-09-09
  • Mybatis Plus条件构造器ConditionConstructor用法实例解析

    Mybatis Plus条件构造器ConditionConstructor用法实例解析

    这篇文章主要介绍了Mybatis Plus条件构造器ConditionConstructor用法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Spring中@DependsOn注解的使用代码实例

    Spring中@DependsOn注解的使用代码实例

    这篇文章主要介绍了Spring中@DependsOn注解的使用代码实例,Spring中@DependsOn,主要是使用在类和方法上, 作用是当前对象要依赖另外一些对象,被依赖的对象会先注册到Spring的IOC容器中,需要的朋友可以参考下
    2024-01-01
  • GraalVM系列Native Image Basics静态分析

    GraalVM系列Native Image Basics静态分析

    这篇文章主要为大家介绍了GraalVM系列Native Image Basics静态分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • SpringCloud Function SpEL注入漏洞分析及环境搭建

    SpringCloud Function SpEL注入漏洞分析及环境搭建

    SpringCloud 是一套分布式系统的解决方案,常见的还有阿里巴巴的Dubbo,Fass的底层实现就是函数式编程,SpringCloud Function 就是Spring提供的分布式函数式编程组件,下面给大家介绍下SpringCloud Function SpEL注入漏洞分析,感兴趣的朋友一起看看吧
    2022-04-04
  • MapStruct内部错误:NullPointerException的解决方案

    MapStruct内部错误:NullPointerException的解决方案

    在Java开发中,MapStruct是一个非常流行的对象映射工具,它通过注解处理器在编译时生成映射代码,极大地简化了对象之间的转换操作,本文将详细分析一个常见的MapStruct内部错误——NullPointerException,并提供一系列解决方案,需要的朋友可以参考下
    2025-02-02
  • Maven中pom.xml文件报错的原因解决

    Maven中pom.xml文件报错的原因解决

    创建Maven项目的时候,如果你选择的Packaging为war,那么就会报错,本文主要介绍了Maven中pom.xml文件报错的原因解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论