日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过List里面对象的属性值来去重List,并把相同属性的其他属性相加

發(fā)布時間:2023/12/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过List里面对象的属性值来去重List,并把相同属性的其他属性相加 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在做一個大的項目,其中有一個通過List里面對象的屬性值來去重List,并把相同屬性的其他屬性相加,都說通過Map的key唯一,來去重。記錄一下

首先有一個實體類User

package com.fmj.test;public class User {private String id;private String name;private String password;private int age;private int jine;private String desc;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getJine() {return jine;}public void setJine(int jine) {this.jine = jine;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public User(String id, String name, String password, int age, int jine, String desc) {this.jine = jine;this.age = age;this.password = password;this.id = id;this.name = name;this.desc = desc;}public User(String id, String name) {this.id = id;this.name = name;}public User() {}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + ", jine=" + jine+ ", desc=" + desc + "]";}}

我們想?通過?id?和name來去重,并把age?和jine?相加起來

private static void sub() {List<User> userList = new ArrayList<User>();User u1 = new User("1", "zhangyi", "zhangyipwd", 21, 101, "yiban1");User u2 = new User("2", "zhanger", "zhangerpwd", 22, 102, "yiban2");User u3 = new User("1", "zhangyi", "zhangyipwd", 23, 103, "yiban3");User u4 = new User("4", "zhansi", "zhangsipwd", 24, 104, "yiban4");User u5 = new User("5", "zhangwu", "zhangwupwd", 25, 105, "yiban5");User u6 = new User("6", "zhangliu", "zhangliupwd", 26, 106, "yiban6");userList.add(u1);userList.add(u2);userList.add(u3);userList.add(u4);userList.add(u5);userList.add(u6);List<User> newuserList = new ArrayList<User>();userList.parallelStream().collect(Collectors.groupingBy(o -> (o.getId() + o.getName()), Collectors.toList())).forEach((id, transfer) -> {transfer.stream().reduce((a, b) -> new User(a.getId(), a.getName(), a.getPassword(), a.getAge() + b.getAge(), a.getJine() + b.getJine(), a.getDesc())).ifPresent(newuserList:: add);});System.out.println("處理過的List:--");newuserList.forEach(item->{System.out.println(item.toString());});}

我上面的例子,可以看出u1?和?u3?會被合并,變成一條,運行結(jié)果如下

處理過的List:-- User [id=2, name=zhanger, password=zhangerpwd, age=22, jine=102, desc=yiban2] User [id=6, name=zhangliu, password=zhangliupwd, age=26, jine=106, desc=yiban6] User [id=5, name=zhangwu, password=zhangwupwd, age=25, jine=105, desc=yiban5] User [id=4, name=zhansi, password=zhangsipwd, age=24, jine=104, desc=yiban4] User [id=1, name=zhangyi, password=zhangyipwd, age=44, jine=204, desc=yiban3]

這就實現(xiàn)了去重累加,這里我復(fù)制了,https://www.cnblogs.com/edda/p/14191917.html,這個文章,對這個tream?確實,小有難度

還記得我上面說過的用Map來處理嗎?下面這個例子會容易理解一點

public static List<User> sub1(List<User> list) {Map<String, User> map = new HashMap<String, User>();list.stream().forEach(user -> {User last = map.get(user.getId()+user.getName());if(map.containsKey(user.getId()+user.getName())){user.setAge(user.getAge() + last.getAge());user.setJine(user.getJine() + last.getJine());map.put(user.getId()+user.getName(), user );}else{map.put(user.getId()+user.getName(), user);}});return map.values().stream().collect(Collectors.toList());}

使用

private static void sub() {List<User> userList = new ArrayList<User>();User u1 = new User("1", "zhangyi", "zhangyipwd", 21, 101, "yiban1");User u2 = new User("2", "zhanger", "zhangerpwd", 22, 102, "yiban2");User u3 = new User("1", "zhangyi", "zhangyipwd", 23, 103, "yiban3");User u4 = new User("4", "zhansi", "zhangsipwd", 24, 104, "yiban4");User u5 = new User("5", "zhangwu", "zhangwupwd", 25, 105, "yiban5");User u6 = new User("6", "zhangliu", "zhangliupwd", 26, 106, "yiban6");userList.add(u1);userList.add(u2);userList.add(u3);userList.add(u4);userList.add(u5);userList.add(u6);List<User> newuserList1 = sub1(userList);System.out.println("處理過的List:--");newuserList1.forEach(item->{System.out.println(item.toString());});}

結(jié)果如下:

處理過的List:-- User [id=2, name=zhanger, password=zhangerpwd, age=22, jine=102, desc=yiban2] User [id=6, name=zhangliu, password=zhangliupwd, age=26, jine=106, desc=yiban6] User [id=5, name=zhangwu, password=zhangwupwd, age=25, jine=105, desc=yiban5] User [id=1, name=zhangyi, password=zhangyipwd, age=44, jine=204, desc=yiban3] User [id=4, name=zhansi, password=zhangsipwd, age=24, jine=104, desc=yiban4]

加上?這一句?排序

Collections.sort(newuserList1, (o1, o2)-> Integer.parseInt(o1.getId()) - Integer.parseInt(o2.getId()));

結(jié)果如下

處理過的List:-- User [id=1, name=zhangyi, password=zhangyipwd, age=44, jine=204, desc=yiban3] User [id=2, name=zhanger, password=zhangerpwd, age=22, jine=102, desc=yiban2] User [id=4, name=zhansi, password=zhangsipwd, age=24, jine=104, desc=yiban4] User [id=5, name=zhangwu, password=zhangwupwd, age=25, jine=105, desc=yiban5] User [id=6, name=zhangliu, password=zhangliupwd, age=26, jine=106, desc=yiban6]

總結(jié)

以上是生活随笔為你收集整理的通过List里面对象的属性值来去重List,并把相同属性的其他属性相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。