例如:
name num1 num2 num3 num4
张三 1 1 2 0
张三 2 0 0 0
去重切value相加后
张三 3 1 2 0
//list为原始数据
//先根据名称分组为一个集合map key为用户名称,value为具有相同名称的用户集合
Map<String, List<User>> userGroupMap = list.stream().collect(Collectors.groupingBy(User::getName));
//users 去重并累加值的集合
List<User> users = new ArrayList<>();
userGroupMap.forEach((key, list) -> {
User user = new User();
user.setNum1(0);
user.setNum2(0);
user.setNum3(0);
user.setNum4(0);
list.forEach(item -> {
user.setNum1(user.getNum1() + item.getNum1());
user.setNum2(user.getNum2() + item.getNum2());
user.setNum3(user.getNum3() + item.getNum3());
user.setNum4(user.getNum4() + item.getNum4());
});
users.add(user);
});
粗心写错了,重新发一下啊
public static void main(String[] args) {
List<User> userList=new ArrayList<>();
User u1=new User("张三",1,1,2,0);
User u2=new User("张三",2,0,0,0);
User u3=new User("李四",1,1,2,0);
User u4=new User("王五",1,3,2,1);
User u5=new User("李四",1,1,0,1);
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList.add(u4);
userList.add(u5);
System.out.println("去重前长度:"+userList.size());
combineSameName(userList);
System.out.println("去重后长度:"+userList.size());
//去重后输出
for(User user:userList) {
System.out.println(user);
}
}
public static void combineSameName(List<User> list){
for(int i=0;i<list.size()-1;i++) {
for(int j=i+1;j<list.size();j++) {
if(list.get(j).getName().equals(list.get(i).getName())) {
int num1=list.get(i).getNum1()+list.get(j).getNum1();
int num2=list.get(i).getNum2()+list.get(j).getNum2();
int num3=list.get(i).getNum3()+list.get(j).getNum3();
int num4=list.get(i).getNum4()+list.get(j).getNum4();
list.get(i).setNum1(num1);
list.get(i).setNum2(num2);
list.get(i).setNum3(num3);
list.get(i).setNum4(num4);
list.remove(list.get(j));
}
}
}
}
public static class User{
private String name;
private int num1;
private int num2;
private int num3;
private int num4;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public int getNum3() {
return num3;
}
public void setNum3(int num3) {
this.num3 = num3;
}
public int getNum4() {
return num4;
}
public void setNum4(int num4) {
this.num4 = num4;
}
public User() {
}
public User(String name, int num1, int num2, int num3, int num4) {
super();
this.name = name;
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
this.num4 = num4;
}
@Override
public String toString() {
return "User [name=" + name + ", num1=" + num1 + ", num2=" + num2 + ", num3=" + num3 + ", num4=" + num4
+ "]";
}
}
运行结果
去重前长度:5
去重后长度:3
User [name=张三, num1=3, num2=1, num3=2, num4=0]
User [name=李四, num1=2, num2=2, num3=2, num4=1]
User [name=王五, num1=1, num2=3, num3=2, num4=1]
对list做遍历。将合并后的数据放新集合中。
采用stream流进行 分组:
Map<String,List<User>> userGroupMap = list.stream().collect(Collectors.groupingBy(User::getName));
简单易懂方法,分两次遍历:
自己建个类测试一下,望采纳!
public static void main(String[] args) {
List<User> userList=new ArrayList<>();
User u1=new User("张三",1,1,2,0);
User u2=new User("张三",2,0,0,0);
User u3=new User("李四",1,1,2,0);
User u4=new User("王五",1,3,2,1);
User u5=new User("李四",1,1,0,1);
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList.add(u4);
userList.add(u5);
System.out.println("去重前长度:"+userList.size());
combineSameName(userList);
System.out.println("去重后长度:"+userList.size());
//去重后输出
for(User user:userList) {
System.out.println(user);
}
}
public static void combineSameName(List<User> list){
for(int i=0;i<list.size()-1;i++) {
for(int j=i+1;j<list.size();j++) {
if(list.get(j).getName().equals(list.get(i).getName())) {
int num1=list.get(i).getNum1()+list.get(j).getNum1();
int num2=list.get(i).getNum1()+list.get(j).getNum2();
int num3=list.get(i).getNum1()+list.get(j).getNum3();
int num4=list.get(i).getNum1()+list.get(j).getNum4();
list.get(i).setNum1(num1);
list.get(i).setNum2(num2);
list.get(i).setNum3(num3);
list.get(i).setNum4(num4);
list.remove(list.get(j));
}
}
}
}
public static class User{
private String name;
private int num1;
private int num2;
private int num3;
private int num4;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public int getNum3() {
return num3;
}
public void setNum3(int num3) {
this.num3 = num3;
}
public int getNum4() {
return num4;
}
public void setNum4(int num4) {
this.num4 = num4;
}
public User() {
}
public User(String name, int num1, int num2, int num3, int num4) {
super();
this.name = name;
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
this.num4 = num4;
}
@Override
public String toString() {
return "User [name=" + name + ", num1=" + num1 + ", num2=" + num2 + ", num3=" + num3 + ", num4=" + num4
+ "]";
}
}
===========运行结果==============
去重前长度:5
去后前长度:3
User [name=张三, num1=3, num2=1, num3=1, num4=1]
User [name=李四, num1=2, num2=2, num3=1, num4=2]
User [name=王五, num1=1, num2=3, num3=2, num4=1]
public static List<User> text(List<User> list){
HashMap<String,User> map=new HashMap<>();
for (int i=0;i<list.size();i++){
if (map.containsKey(list.get(i).getName())){
User user=map.get(list.get(i).getName());
user.setNum1(user.getNum1()+list.get(i).getNum1());
user.setNum2(user.getNum2()+list.get(i).getNum2());
user.setNum3(user.getNum3()+list.get(i).getNum3());
user.setNum4(user.getNum4()+list.get(i).getNum4());
}else {
map.put(list.get(i).getName(),list.get(i));
}
}
return new ArrayList(map.values());
}
望采纳