我是靠谱客的博主 单纯白昼,这篇文章主要介绍Java List集合Stream流多字段分组获取字段值和,现在分享给大家,希望可以做个参考。

说明:实际业务开发中,从数据库中获取所有站点降水数据,需要对站点降水进行累加,根据站点进行分组,然后将分组之后的降水进行累加。下面的方法就是使用Stream流进行站点分组,获取分组之后降水累加。

1、业务代码:

public List<AtstationDTO> getTimeRangeRainfall(Long startTime, Long endTime) {
    List<AtstationDTO> rainfalls = new ArrayList<>();

    List<AtstationDTO> stations = new ArrayList<>();
    List<String> tableNames = CommonTableName.calcTimeRangeToTableNames(DateUtils.timestampToDate(startTime), DateUtils.timestampToDate(endTime), "data_atstation_all", "base");
    for (String tableName : tableNames)
        stations.addAll(atstationMapper.selectRainfallByTime(tableName, startTime, endTime));

    stations.parallelStream().collect(Collectors.groupingBy((station) -> new AtstationDTO(station.getStationIdC(), station.getStationName(), station.getLon(), station.getLat()), Collectors.summarizingDouble(AtstationDTO::getMinuteRainfall))).forEach((key, value) -> {
        key.setTimestamp(endTime);
        key.setMinuteRainfall((float)value.getSum());
        rainfalls.add(key);
    });

    return rainfalls;
}

核心代码:

stations.parallelStream().collect(Collectors.groupingBy((station) -> new AtstationDTO(station.getStationIdC(), station.getStationName(), station.getLon(), station.getLat()), Collectors.summarizingDouble(AtstationDTO::getMinuteRainfall))).forEach((key, value) -> {
    key.setTimestamp(endTime);
    key.setMinuteRainfall((float)value.getSum());
    rainfalls.add(key);
});

最后

以上就是单纯白昼最近收集整理的关于Java List集合Stream流多字段分组获取字段值和的全部内容,更多相关Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(116)

评论列表共有 0 条评论

立即
投稿
返回
顶部