本文主要讲解:Java 8 Stream之Collectors.groupingBy()分组示例
Collectors.groupingBy() 分组之常见用法
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list
*/
public void groupingByCity() {
Map
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
Collectors.groupingBy() 分组之统计每个分组的count
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list统计count
*/
public void groupingByCount() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.counting()));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
Collectors.groupingBy() 分组之统计分组平均值
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list并计算分组年龄平均值
*/
public void groupingByAverage() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.averagingInt(Employee::getAge)));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
Collectors.groupingBy() 分组之统计分组总值
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list并计算分组销售总值
*/
public void groupingBySum() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.summingLong(Employee::getAmount)));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
// 对Map按照分组销售总值逆序排序
Map
map.entrySet().stream().sorted(Map.Entry.
.forEachOrdered(e -> sortedMap.put(e.getKey(), e.getValue()));
sortedMap.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
Collectors.groupingBy() 分组之Join分组List
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list并通过join操作连接分组list中的对象的name 属性使用逗号分隔
*/
public void groupingByString() {
Map
Collectors.mapping(Employee::getName, Collectors.joining(", ", "Names: [", "]"))));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
Collectors.groupingBy() 分组之转换分组结果List -> List
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list,将List转化为name的List
*/
public void groupingByList() {
Map
Collectors.groupingBy(Employee::getCity, Collectors.mapping(Employee::getName, Collectors.toList())));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
v.stream().forEach(item -> {
System.out.println("item = " + item);
});
});
}
Collectors.groupingBy() 分组之转换分组结果List -> Set
功能代码:
/**
* 使用java8 stream groupingBy操作,按城市分组list,将List转化为name的Set
*/
public void groupingBySet() {
Map
Collectors.groupingBy(Employee::getCity, Collectors.mapping(Employee::getName, Collectors.toSet())));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
v.stream().forEach(item -> {
System.out.println("item = " + item);
});
});
}
Collectors.groupingBy() 分组之使用对象分组List
功能代码:
/**
* 使用java8 stream groupingBy操作,通过Object对象的成员分组List
*/
public void groupingByObject() {
Map
return new Manage(item.getName());
}));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
Collectors.groupingBy() 分组之使用两个成员分组List
功能代码:
/**
* 使用java8 stream groupingBy操作, 基于city 和name 实现多次分组
*/
public void groupingBys() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.groupingBy(Employee::getName)));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
v.forEach((i, j) -> {
System.out.println(i + " = " + j);
});
});
}
自定义Distinct对结果去重
功能代码
/**
* 使用java8 stream groupingBy操作, 基于Distinct 去重数据
*/
public void groupingByDistinct() {
List
.collect(Collectors.toList());;
list.stream().forEach(item->{
System.out.println("city = " + item.getCity());
});
}
/**
* 自定义重复key 规则
* @param keyExtractor
* @return
*/
private static
Set
package com.stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* Java 8 Stream 之groupingBy 分组讲解
*
* @author zzg
*
*/
public class Java8GroupBy {
List
/**
* 数据初始化
*/
public void init() {
List
for (int i = 0; i < 10; i++) {
Random random = new Random();
Integer index = random.nextInt(4);
Employee employee = new Employee(citys.get(index), "姓名" + i, (random.nextInt(4) * 10 - random.nextInt(4)),
(random.nextInt(4) * 1000 - random.nextInt(4)));
employees.add(employee);
}
}
/**
* 使用java8 stream groupingBy操作,按城市分组list
*/
public void groupingByCity() {
Map
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
/**
* 使用java8 stream groupingBy操作,按城市分组list统计count
*/
public void groupingByCount() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.counting()));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
/**
* 使用java8 stream groupingBy操作,按城市分组list并计算分组年龄平均值
*/
public void groupingByAverage() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.averagingInt(Employee::getAge)));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
/**
* 使用java8 stream groupingBy操作,按城市分组list并计算分组销售总值
*/
public void groupingBySum() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.summingLong(Employee::getAmount)));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
// 对Map按照分组销售总值逆序排序
Map
map.entrySet().stream().sorted(Map.Entry.
.forEachOrdered(e -> sortedMap.put(e.getKey(), e.getValue()));
sortedMap.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
/**
* 使用java8 stream groupingBy操作,按城市分组list并通过join操作连接分组list中的对象的name 属性使用逗号分隔
*/
public void groupingByString() {
Map
Collectors.mapping(Employee::getName, Collectors.joining(", ", "Names: [", "]"))));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
/**
* 使用java8 stream groupingBy操作,按城市分组list,将List转化为name的List
*/
public void groupingByList() {
Map
Collectors.groupingBy(Employee::getCity, Collectors.mapping(Employee::getName, Collectors.toList())));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
v.stream().forEach(item -> {
System.out.println("item = " + item);
});
});
}
/**
* 使用java8 stream groupingBy操作,按城市分组list,将List转化为name的Set
*/
public void groupingBySet() {
Map
Collectors.groupingBy(Employee::getCity, Collectors.mapping(Employee::getName, Collectors.toSet())));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
v.stream().forEach(item -> {
System.out.println("item = " + item);
});
});
}
/**
* 使用java8 stream groupingBy操作,通过Object对象的成员分组List
*/
public void groupingByObject() {
Map
return new Manage(item.getName());
}));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
/**
* 使用java8 stream groupingBy操作, 基于city 和name 实现多次分组
*/
public void groupingBys() {
Map
.collect(Collectors.groupingBy(Employee::getCity, Collectors.groupingBy(Employee::getName)));
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
v.forEach((i, j) -> {
System.out.println(i + " = " + j);
});
});
}
/**
* 使用java8 stream groupingBy操作, 基于Distinct 去重数据
*/
public void groupingByDistinct() {
List
.collect(Collectors.toList());;
list.stream().forEach(item->{
System.out.println("city = " + item.getCity());
});
}
/**
* 自定义重复key 规则
* @param keyExtractor
* @return
*/
private static
Set
本文参考:
————————————————
版权声明:本文为CSDN博主「在奋斗的大道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouzhiwengang/article/details/112319054