方式一:对某个字段分组
package com.hyx.chatgpt.example.demo;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupByTest {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("张三");
u1.setAge(20);
u1.setMoney(3000);
User u2 = new User();
u2.setName("李四");
u2.setAge(30);
u2.setMoney(6000);
User u3 = new User();
u3.setName("张三");
u3.setAge(20);
u3.setMoney(4000);
userList.add(u1);
userList.add(u2);
userList.add(u3);
Map<String, List<User>> nameToUserMap = userList.stream().collect(Collectors.groupingBy(User::getName));
System.out.println(JSONObject.toJSONString(nameToUserMap));
}
}
输出:
{"李四":[{"age":30,"money":6000,"name":"李四"}],"张三":[{"age":20,"money":3000,"name":"张三"},{"age":20,"money":4000,"name":"张三"}]}
方式二:对多个字段分组
package com.hyx.chatgpt.example.demo;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupByTest {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("张三");
u1.setAge(20);
u1.setMoney(3000);
User u2 = new User();
u2.setName("李四");
u2.setAge(30);
u2.setMoney(6000);
User u3 = new User();
u3.setName("张三");
u3.setAge(30);
u3.setMoney(4000);
userList.add(u1);
userList.add(u2);
userList.add(u3);
Map<String, List<User>> nameAndAgeToUserMap = userList.stream().collect(Collectors.groupingBy(e -> e.getName() + "-"+e.getAge()));
System.out.println(JSONObject.toJSONString(nameAndAgeToUserMap));
}
}
输出:
{"李四-30":[{"age":30,"money":6000,"name":"李四"}],"张三-30":[{"age":30,"money":4000,"name":"张三"}],"张三-20":[{"age":20,"money":3000,"name":"张三"}]}
方式三:分组后的value是取某个字段的集合(set/list)
package com.hyx.chatgpt.example.demo;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupByTest {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("张三");
u1.setAge(20);
u1.setMoney(3000);
User u2 = new User();
u2.setName("李四");
u2.setAge(30);
u2.setMoney(6000);
User u3 = new User();
u3.setName("张三");
u3.setAge(30);
u3.setMoney(4000);
userList.add(u1);
userList.add(u2);
userList.add(u3);
Map<String, List<Integer>> nameToAagMap = userList.stream().collect(Collectors.groupingBy(User::getName,
Collectors.mapping(e -> e.getAge(),Collectors.toList())));
System.out.println(JSONObject.toJSONString(nameToAagMap));
}
}
输出:{"李四":[30],"张三":[20,30]}