题主,你好
确实如你所说,是可以一个Collectors.groupingBy就可以搞定的,只是可能你没有弄清楚Collectors.mapping的第二个参数代表的含义
public static
Collector mapping(Function super T, ? extends U> mapper,
Collector super U, A, R> downstream) {
BiConsumer downstreamAccumulator = downstream.accumulator();
return new CollectorImpl<>(downstream.supplier(),
(r, t) -> downstreamAccumulator.accept(r, mapper.apply(t)),
downstream.combiner(), downstream.finisher(),
downstream.characteristics());
}
该方法的第二个参数就是一个Collector,而我们平常用的静态方法,比如Collectors.toList,Collectors.mapping亦或是Collectors.groupingBy,其实返回结果都是生成一个Collector的,因此可以这么说Collectors工具方法中大多数的方法都是为了生成一个Collector,所以我们要做的只是在其中选择一个合适的Collector即可
因此题主你才会想到首先用Collectors.groupingBy进行数据分类,按照SpuPropertyValue::getSpuCode分类,接下来要处理的数据其实还是一堆SpuPropertyValueE,只是