Java8?Stream流根據(jù)多個(gè)字段去重
Stream流根據(jù)多個(gè)字段去重
分組
list.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));
java8有一個(gè)collectingAndThen可以根據(jù)多個(gè)字段去重
list.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));
通過(guò)hashSet去重:
該種去重是bean完全相同的時(shí)候算重復(fù)數(shù)據(jù)
List<String> classNameList = new ArrayList(new HashSet(list));
Stream多字段去重,去重求和
stream進(jìn)行l(wèi)ist的循環(huán)遍歷。
conver的String由去重條件組成,中間用下劃線或特殊字符分割
代碼如下:

完整demo如下
附帶測(cè)試結(jié)果
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;
}
}啟動(dòng)主函數(shù)
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());
}
}
}運(yùn)行結(jié)果如下:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java操作minio刪除文件夾及其文件方法(MinIO基本使用)
MinIO是一個(gè)高性能、無(wú)限擴(kuò)展的開(kāi)源對(duì)象存儲(chǔ)服務(wù)器,它以對(duì)象的形式存儲(chǔ)數(shù)據(jù),并兼容Amazon S3接口,它適用于大規(guī)模數(shù)據(jù)存儲(chǔ)、大數(shù)據(jù)分析、文件共享和備份等應(yīng)用場(chǎng)景,這篇文章主要介紹了java操作minio刪除文件夾及其文件方法,需要的朋友可以參考下2024-02-02
基于Properties實(shí)現(xiàn)配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)
這篇文章主要介紹了基于Properties實(shí)現(xiàn)配置數(shù)據(jù)庫(kù)驅(qū)動(dòng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
MyBatis后端對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查等操作實(shí)例
Mybatis是appach下開(kāi)源的一款持久層框架,通過(guò)xml與java文件的緊密配合,避免了JDBC所帶來(lái)的一系列問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于MyBatis后端對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查等操作的相關(guān)資料,需要的朋友可以參考下2022-08-08
Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析
這篇文章主要介紹了Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Spring中@DependsOn注解的使用代碼實(shí)例
這篇文章主要介紹了Spring中@DependsOn注解的使用代碼實(shí)例,Spring中@DependsOn,主要是使用在類(lèi)和方法上, 作用是當(dāng)前對(duì)象要依賴(lài)另外一些對(duì)象,被依賴(lài)的對(duì)象會(huì)先注冊(cè)到Spring的IOC容器中,需要的朋友可以參考下2024-01-01
GraalVM系列Native?Image?Basics靜態(tài)分析
這篇文章主要為大家介紹了GraalVM系列Native?Image?Basics靜態(tài)分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建
SpringCloud 是一套分布式系統(tǒng)的解決方案,常見(jiàn)的還有阿里巴巴的Dubbo,F(xiàn)ass的底層實(shí)現(xiàn)就是函數(shù)式編程,SpringCloud Function 就是Spring提供的分布式函數(shù)式編程組件,下面給大家介紹下SpringCloud?Function?SpEL注入漏洞分析,感興趣的朋友一起看看吧2022-04-04
MapStruct內(nèi)部錯(cuò)誤:NullPointerException的解決方案
在Java開(kāi)發(fā)中,MapStruct是一個(gè)非常流行的對(duì)象映射工具,它通過(guò)注解處理器在編譯時(shí)生成映射代碼,極大地簡(jiǎn)化了對(duì)象之間的轉(zhuǎn)換操作,本文將詳細(xì)分析一個(gè)常見(jiàn)的MapStruct內(nèi)部錯(cuò)誤——NullPointerException,并提供一系列解決方案,需要的朋友可以參考下2025-02-02
Maven中pom.xml文件報(bào)錯(cuò)的原因解決
創(chuàng)建Maven項(xiàng)目的時(shí)候,如果你選擇的Packaging為war,那么就會(huì)報(bào)錯(cuò),本文主要介紹了Maven中pom.xml文件報(bào)錯(cuò)的原因解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

