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基本使用)
MinIO是一个高性能、无限扩展的开源对象存储服务器,它以对象的形式存储数据,并兼容Amazon S3接口,它适用于大规模数据存储、大数据分析、文件共享和备份等应用场景,这篇文章主要介绍了java操作minio删除文件夹及其文件方法,需要的朋友可以参考下2024-02-02
Mybatis Plus条件构造器ConditionConstructor用法实例解析
这篇文章主要介绍了Mybatis Plus条件构造器ConditionConstructor用法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-08-08
GraalVM系列Native Image Basics静态分析
这篇文章主要为大家介绍了GraalVM系列Native Image Basics静态分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-02-02
SpringCloud Function SpEL注入漏洞分析及环境搭建
SpringCloud 是一套分布式系统的解决方案,常见的还有阿里巴巴的Dubbo,Fass的底层实现就是函数式编程,SpringCloud Function 就是Spring提供的分布式函数式编程组件,下面给大家介绍下SpringCloud Function SpEL注入漏洞分析,感兴趣的朋友一起看看吧2022-04-04
MapStruct内部错误:NullPointerException的解决方案
在Java开发中,MapStruct是一个非常流行的对象映射工具,它通过注解处理器在编译时生成映射代码,极大地简化了对象之间的转换操作,本文将详细分析一个常见的MapStruct内部错误——NullPointerException,并提供一系列解决方案,需要的朋友可以参考下2025-02-02


最新评论