java8groupBy对数据按字段归类数据

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)));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值