waters.stream() .collect(Collectors.groupingBy(WaterNodePotentialRespVo::getNode, Collectors.maxBy(Comparator.comparing(WaterNodePotentialRespVo::getWater)))) .forEach((k, v) -> { WaterNodeCRespVo respVo = new WaterNodeCRespVo(); respVo.setNode(k); respVo.setMaxWaterDepth(v.get().getWater()); respVo.setMaxTm(v.get().getTm()); finalRespVos.add(respVo); }); 并找到MaxWaterDepth第一次大于零
时间: 2023-11-22 19:55:51 浏览: 154
这段代码使用了Java 8中的Stream API,将一个WaterNodePotentialRespVo对象的集合按照节点分组,并取每个节点对应的最大水位值。然后将每个节点的最大水位值和时间戳设置到一个新的WaterNodeCRespVo对象中,并将其添加到一个最终结果集中。
要找到MaxWaterDepth第一次大于零,可以在forEach方法中加入一个变量来判断是否已经找到了第一次大于零的节点,如果找到了就直接返回,否则继续查找。示例代码如下:
```
boolean found = false;
for (Map.Entry<String, Optional<WaterNodePotentialRespVo>> entry : map.entrySet()) {
String node = entry.getKey();
WaterNodePotentialRespVo respVo = entry.getValue().get();
if (respVo.getWater() > 0 && !found) {
WaterNodeCRespVo cRespVo = new WaterNodeCRespVo();
cRespVo.setNode(node);
cRespVo.setMaxWaterDepth(respVo.getWater());
cRespVo.setMaxTm(respVo.getTm());
finalRespVos.add(cRespVo);
found = true;
}
}
```
这样就可以在遍历完整个集合之后,找到第一次MaxWaterDepth大于零的节点了。
阅读全文