自定义一个对象:
public class QuotaDto{
private Long id;
private String quotaId;
private String quotaName;
private String reportDate;
private String email;
}
List<QuotaDto> quotaDtolists = new ArrayList<>();
提取对象中的某个字段的集合list
List <string> quotaNames=quotaDtolists.stream().map(QuotaDto::getQuotaName).collect(Collectors.toList());
提取某个字段为key,且是唯一值,组装成map数据
Map<String,QuotaDto> quotaMap= quotaDtolists.stream().collect(Collectors.toMap(QuotaDto::getQuotaId, Function.identity()));
Map<String,String> quotaMap= quotaDtolists.stream().collect(Collectors.toMap(QuotaDto::getQuotaId, QuotaDto::getQuotaName));
在枚举类QuotaEnum中可以用 Stream.of(values()).collect(Collectors.toMap(QuotaEnum::getvalue, Function.identity())); 来定义枚举内容的map
提取某个字段为key,以key为对象的有多个,组装成map数据
Map<String,List<QuotaDto>> quotaMap= quotaDtolists.stream().collect(Collectors.groupingBy(QuotaDto::getQuotaName));
Map<String,List<Map<String,String>>> quotaMap= maps.stream().collect(Collectors.groupingBy(map->map.get("userId")));
(元素拼接)提前对象中的某个参数,并以;为分隔符返回String类型
String emailAddress=quotaDtolists.stream().map(Quota->Quota.getEmail().toUpperCase()+"@qq.com").collect(Collectors.joining(";"));
(元素聚合)maxBy,minBy,averagingDouble,counting等
***maxBy*** 求最大值
List<Integer> list = Arrays.asList(1, 2, 3);
Integer maxValue = list.stream().collect(Collectors.collectingAndThen(Collectors.maxBy((a, b) -> a - b), Optional::get));
***minBy*** 求最小值
Integer minValue = list.stream().collect(Collectors.collectingAndThen(Collectors.minBy((a, b) -> a - b), Optional::get));
***summingInt*** 求和
Integer sumValue = list.stream().collect(Collectors.summingInt(item -> item));
***averagingDouble*** 求平均值
Double avg = list.stream().collect(Collectors.averagingDouble(x -> x));
***counting*** 求汇总数
long count= quotaDtolists.stream().filter(Quota-> Quota.getId()>1).collect(Collectors.counting());
根据List对象中的多个参数去重
ArrayList<QuotaDto> collect = quotaDtolists.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(q -> q.getId()+";"+q.getQuotaName()))), ArrayList::new));