前言
数据库经常使用的逻辑,放在Java代码如何实现,现在有个快捷的方法就是使用Java8的流进行分组
准备
需求:要把每个城市、每个公司的学生数量做分组统计数量
User.java
package com.wenwen.blog.service.learn.stream;
import lombok.Data;
/**
* @author WangWenLei
* @DATE: 2021/3/1
**/
@Data
public class Student {
private String name;
private String city;
private String company;
public Student(String name, String city, String company) {
this.name = name;
this.city = city;
this.company = company;
}
}
Data.java
package com.wenwen.blog.service.learn.stream;
import lombok.Data;
/**
* @author WangWenLei
* @DATE: 2021/3/1
**/
@Data
public class DataInfo {
private String city;
private String company;
private int count;
@Override
public String toString() {
return "DataInfo{" +
"city='" + city + '\'' +
", company='" + company + '\'' +
", count=" + count +
'}' + "\n";
}
}
使用
package com.wenwen.blog.service.learn.stream;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author WangWenLei
* @DATE: 2021/3/1
**/
public class GroupBy {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
Student s1 = new Student("wwl","北京","公司1");
Student s2 = new Student("wwl2","北京","公司2");
Student s3 = new Student("wwl3","深圳","公司1");
Student s4 = new Student("wwl4","深圳","公司3");
Student s5 = new Student("wwl5","北京","公司1");
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
// 先按城市排序,再按公司排序
Map<String, Long> collect = list.stream()
// 中间用“_”隔开
.collect(Collectors.groupingBy(o -> o.getCity() + "_" + o.getCompany(), Collectors.counting()));
// 取数据
List<DataInfo> countRecords = collect.keySet().stream().map(key -> {
String[] temp = key.split("_");
String cityName = temp[0];
String company = temp[1];
DataInfo record = new DataInfo();
// 分组条件1
record.setCity(cityName);
// 分组条件2
record.setCompany(company);
// 统计的数量
record.setCount(collect.get(key).intValue());
return record;
}).collect(Collectors.toList());
System.out.println(collect);
System.out.println(countRecords);
}
}
运行结果:
这样就进行分组啦~
躬身自省,淳朴而谦逊否——文文的博客