import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
-
@Auther: qxc
-
@Date: 2020/11/13 09:47
-
@Description: 测试java8 groupby对集合数据进行分类
*/
public class JavaGroupByTest {public static void main(String[] args) {
List list= new ArrayList<>();
User user1=new User(“张三”,“上海”,18,“2020”,“aa”,“bb”);
User user2=new User(“李四”,“北京”,18,“2020”,“aa”,“bb”);
User user3=new User(“王五”,“南京”,20,“2019”,“ccc”,“bb”);
User user4=new User(“张三”,“北京”,18,“2019”,“aa”,“dd”);
User user5=new User(“张三”,“上海”,18,“2020”,“aa”,“bb”);
User user6=new User(“李四”,“武汉”,17,“2015”,“zz”,“bb”);
User user7=new User(“张三”,“东京”,35,“2020”,“aa”,“bb”);
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
list.add(user7);//按名称进行分类 Map<String, List<User>> collectMap = list.stream().collect(Collectors.groupingBy(User::getName)); //把名称相同的在按照地址分类 Set<String> keySet = collectMap.keySet(); keySet.forEach((key)->{ System.out.print("name为:‘"+key+"’"); List<User> userList = collectMap.get(key); Map<String, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getAddress)); Set<String> keySet2 = map.keySet(); keySet2.forEach((key2)->{ System.out.println("并且address为:‘"+key2+"’的集合"); map.get(key2).forEach((user)->{ System.out.println(user.toString()); }); }); });
}
}
class User{
private String name;
private String address;
private Integer age;
private String birth;
private String a1;
private String a2;
public User() {
}
public User(String name, String address, Integer age, String birth, String a1, String a2) {
this.name = name;
this.address = address;
this.age = age;
this.birth = birth;
this.a1 = a1;
this.a2 = a2;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getA1() {
return a1;
}
public void setA1(String a1) {
this.a1 = a1;
}
public String getA2() {
return a2;
}
public void setA2(String a2) {
this.a2 = a2;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
", birth='" + birth + '\'' +
", a1='" + a1 + '\'' +
", a2='" + a2 + '\'' +
'}';
}
}
====================================================================================================================
字符串按是否条件分类
List list =new ArrayList<>();
list.add(“aa_01”);
list.add(“aa_02”);
list.add(“aa_03”);
list.add(“aa_04”);
list.add(“bb_01”);
list.add(“bb_02”);
list.add(“bb_03”);
list.add(“bb_04”);
//把以结尾相同的的归类到一起:例如: list1: aa_01 bb_01
list.stream().collect(Collectors.groupingBy(s -> s.substring(s.lastIndexOf("_")+1)));