你主要是在寻找Collectors.mapping内groupingBy
.
Map<Integer, List<Double>> valueMap = records.stream()
.collect(Collectors.groupingBy(keyFunc,
Collectors.mapping(Record::getData, Collectors.toList())));
这将分组Record
由他们的instant
的小时和此类记录的相应数据List
作为地图的值。根据进一步评论
我想从最后一个数据中减去第一个数据
是的,列表将根据即时列表进行排序
您可以使用分组映射来获取所需的输出:
Map<Integer, Double> output = new HashMap<>();
valueMap.forEach((k, v) -> output.put(k, v.get(v.size() - 1) - v.get(0)));
或者,您可以使用Collectors.mapping with Collectors.collectingAndThen进一步如:
Map<Integer, Double> valueMap = records.stream()
.collect(Collectors.groupingBy(keyFunc,
Collectors.mapping(Record::getData,
Collectors.collectingAndThen(
Collectors.toList(), recs -> recs.get(recs.size() - 1) - recs.get(0)))));