我是Java新手,考虑使用Stream APi中的groupingBy
,对我来说,这太复杂了:
static <T,K,A,D> Collector<T,?,Map<K,D>>
groupingBy(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream)
如何在不指定“ Classname :: methodName”之类的快速语法的情况下对列表进行分组
在google / stackoverflow上,我们总是会找到像这样的快速语法:
.collect(Collectors.groupingBy(A::getId,
Collectors.reducing(BigDecimal.ZERO,
A::getAmount,
BigDecimal::add)))
但是有时候我们会有一个DTO对象的列表,其中包含其他DTO对象,例如:
class bDTO{
public cDTO cdto;
public BigDecimal total;
}
class aDTO {
public bDTO bdto;
}
我想按adto.bdto.cdto.id
而不是aDTO::someInexistantMethod??
分组
因为我所有DTO的属性都是公开的,所以我没有getter / setter,我想做一些类似箭头功能的操作来获取当前对象
Returning some `Map<String, BigDecimal>` doing :
(List<aDTO>).collect(Collectors.groupingBy(x -> x.bdto.id+"_"+x.bdto.cdto.id,
Collectors.reducing(BigDecimal.ZERO,
x -> x.bdto.cdto.total,
BigDecimal::add)))
通过这里的问题来了解这些分类器/映射器
1.如何轻松访问x.bdto.id+"_"+x.bdto.cdto.id
2.如何选择x.bdto.cdto.total
此字段
感谢您解开这个概念,并为我提供最佳解决方案 我想避免其他功能,例如地图/过滤器等...