龙空技术网

Java List集合Stream流多字段分组获取字段值和

编程课堂 325

前言:

此时姐妹们对“java中读取数据库中数据”大约比较关怀,大家都想要了解一些“java中读取数据库中数据”的相关文章。那么小编也在网上网罗了一些有关“java中读取数据库中数据””的相关内容,希望姐妹们能喜欢,同学们一起来学习一下吧!

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

业务代码

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中读取数据库中数据