目录
1、初始化Bean
public class User {
int age;
int heigh;
public User(int age, int heigh) {
this.age = age;
this.heigh = heigh;
}
public User(int age) {
this.age = age;
}
public User() {
}
public int getHeigh() {
return heigh;
}
public void setHeigh(int heigh) {
this.heigh = heigh;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", heigh=" + heigh +
'}';
}
}
2、分组在分组
/**
* 分组之后再分组
*
* @author hubozhi
* @date 2020/8/30 16:07
**/
public class StreamStudy {
private static List<User> userList = new ArrayList<>();
static {
Random random = new Random();
for (int i = 0; i < 100; i++) {
User user = new User();
user.setAge(random.nextInt(5));
user.setHeigh(random.nextInt(30));
userList.add(user);
}
//查看分组情况
Map<Integer, List<User>> collect = userList.stream().collect(Collectors.groupingBy(User::getAge));
collect.forEach((k, v) -> {
System.out.println(k + ":");
v.forEach(vX -> System.out.println("|--" + vX));
});
}
public static void main(String[] args) {
//分组在分组:先按年龄分组,再按身高分组
Map<Integer, Map<Integer, List<User>>> collect2 = userList.stream().collect(Collectors.groupingBy(User::getAge, Collectors.groupingBy(User::getHeigh)));
collect2.forEach((K,V)->{
System.out.println(K);
V.forEach((k,v)->{
System.out.println("|--"+k);
v.forEach(item->{
System.out.println("|--|--"+item);
});
});
});
}
}
3、分组去重统计
/**
* 分组去重统计:先分组,在对每组中的数据进行去重,在对去重后的结果进行统计
*
* @author hubozhi
* @date 2020/8/30 16:09
**/
public class StreamStudy2 {
private static List<User> userList = new ArrayList<>();
static {
Random random = new Random();
for (int i = 0; i < 100; i++) {
User user = new User();
user.setAge(random.nextInt(5));
user.setHeigh(random.nextInt(30));
userList.add(user);
}
//查看分组情况
Map<Integer, List<User>> collect = userList.stream().collect(Collectors.groupingBy(User::getAge));
collect.forEach((k, v) -> {
System.out.println(k + ":");
v.forEach(vX -> System.out.println("|--" + vX));
});
}
public static void main(String[] args) {
//分组去重:先按年龄分组,再按身高去重
//分组,去重
Map<Integer, TreeSet<User>> groupAndDistinct = userList.stream().collect(Collectors.groupingBy(User::getAge, Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getHeigh)))));
groupAndDistinct.forEach((K,V)->{
System.out.println(K);
V.forEach(k->{System.out.println("|--"+k);});
});
//分组去重并转换为List
Map<Integer, ArrayList<User>> groupAndDistinctAndToList = userList.stream().collect(Collectors.groupingBy(User::getAge, Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getHeigh))), ArrayList::new)));
groupAndDistinctAndToList.forEach((K,V)->{
System.out.println(K);
V.forEach(k->{System.out.println("|--"+k);});
});
//分组去重统计
Map<Integer, Integer> groupAndDistinctAndCount =
userList.stream().collect(
Collectors.groupingBy(
User::getAge,
//去重并统计
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(User::getHeigh))
),
Set::size
)
)
);
groupAndDistinctAndCount.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
}
4、分组统计
/**
* 分组统计:先分组,在统计每组中元素的个数
*
* @author hubozhi
* @date 2020/8/30 16:18
**/
public class StreamStudy3 {
private static List<User> userList = new ArrayList<>();
static {
Random random = new Random();
for (int i = 0; i < 100; i++) {
User user = new User();
user.setAge(random.nextInt(5));
user.setHeigh(random.nextInt(30));
userList.add(user);
}
//查看分组情况
Map<Integer, List<User>> collect = userList.stream().collect(Collectors.groupingBy(User::getAge));
collect.forEach((k, v) -> {
System.out.println(k + ":");
v.forEach(vX -> System.out.println("|--" + vX));
});
}
public static void main(String[] args) {
Map<Integer, Long> groupAndCount = userList.stream().collect(Collectors.groupingBy(User::getAge, Collectors.counting()));
groupAndCount.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
}