试着写了一下
final Set<String> columns =
list.stream().map(Record::getCode).collect(Collectors.toSet());
list.stream()
.collect(Collectors.groupingBy(Record::getGroup))
.entrySet().stream()
.map(entry -> {
List<Record> tmp = entry.getValue();
Collector<Record, Map<String, Integer>, Map<String, Integer>> collector = Collector.of(
() ->
columns.stream().collect(Collectors.toMap(col -> col, count -> 0)),
(map, record) -> {
String code = record.getCode();
map.put(code, map.getOrDefault(code, 0) + 1);
},
(m, sm) -> m
);
Map<String, Integer> row =
tmp.stream().collect(collector);
return new HashMap.SimpleEntry<>(entry.getKey(), row);
})
.forEach(System.out::println);
输出:
组 2={code3=1, code2=0, code1=1}
组 1={code3=0, code2=1, code1=1}