memberBenefitExclusive.stream().filter(benefit -> !StringUtils.isEmpty(benefit.getBenefitVal())).collect(Collectors.toList()) 获得
时间: 2023-07-21 13:58:44 浏览: 136
这段代码使用了 Java 8 的流式操作,目的是从 memberBenefitExclusive 列表中筛选出 benefitVal 不为空的元素,然后将它们收集到一个新的列表中返回。具体来说,代码中使用了 filter() 方法对每个元素进行筛选,如果元素的 benefitVal 不为空,则保留该元素,否则过滤掉该元素。然后使用了 collect() 方法将满足条件的元素收集到一个新的列表中并返回。在代码中,使用了 StringUtils.isEmpty() 方法来判断 benefitVal 是否为空。该方法是 Apache Commons Lang 库中的一个实用方法,用于判断字符串是否为空或 null。
相关问题
解释下面代码的意思: Map<String,HashMap> meterEnergyMap =list.stream().collect(Collectors.toMap((item->MapUtils.getString(item, "meterNo")),item->item)); for (RankDataVo vo : topList) { // BigDecimal value = list.stream().filter(t -> vo.getSnList().contains(MapUtils.getString(t, "meterNo")) // && StringUtils.isNotBlank(MapUtils.getString(t, "totalValue"))).map(t -> new BigDecimal(MapUtils.getString(t, "totalValue"))).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal value = BigDecimal.ZERO; List<String> itemSnList = vo.getSnList(); if(!CollectionUtils.isEmpty( itemSnList)){ value = itemSnList.stream().map(t->{ Map meterEnergy = meterEnergyMap.get(t); if(meterEnergy==null){ return BigDecimal.ZERO; } return new BigDecimal(MapUtils.getString(meterEnergyMap.get(t), "totalValue")); } ).reduce(BigDecimal.ZERO, BigDecimal::add); } vo.setValue(NumberUtil.round(value, 2, RoundingMode.HALF_UP)); } topList = topList.stream().filter(t -> t.getValue() != null).sorted(Comparator.comparing(RankDataVo::getValue).reversed()).collect(Collectors.toList());
这段代码的意思是:
首先根据列表`list`中每个元素的`meterNo`属性作为key,将整个元素作为value,生成一个`Map<String, HashMap>`类型的变量`meterEnergyMap`。
然后遍历另一个列表`topList`中的每个元素`vo`,将其`snList`属性中的每个元素`sn`作为key,从`meterEnergyMap`中取出对应的value,如果不存在则返回0;否则将对应value的`totalValue`属性转换成BigDecimal类型,然后通过`reduce`方法将所有元素的值相加,得到一个BigDecimal类型的总和`value`,并将其设置为当前元素`vo`的`value`属性。
最后,对`topList`进行筛选和排序,去除`value`为空的元素,并按照`value`的大小从大到小排序,最终返回排好序的列表。
List<ProjWorkCostVerVO> projWorkCostVerVOS = new ArrayList<>(); Map<String, String> costId2IdMap = projWorkCostVerVOS.stream().filter(item -> { if (StringUtils.isEmpty(item.getCostId()) || StringUtils.isEmpty(item.getId())) { return false; } return true; }).collect(Collectors.toMap(ProjWorkCostVerVO::getCostId, ProjWorkCostVerVO::getId, (item1, item2) -> (item1))); 把以上代码转换成 for循环
以下是将代码转换为 for 循环的代码:
```
List<ProjWorkCostVerVO> projWorkCostVerVOS = new ArrayList<>();
Map<String, String> costId2IdMap = new HashMap<>();
for (ProjWorkCostVerVO item : projWorkCostVerVOS) {
if (!StringUtils.isEmpty(item.getCostId()) && !StringUtils.isEmpty(item.getId())) {
costId2IdMap.put(item.getCostId(), item.getId());
}
}
```
这段代码的功能是过滤出 `ProjWorkCostVerVO` 对象列表中 `costId` 和 `id` 都不为空的元素,然后将其转换为一个 `Map` 对象,其中 `costId` 作为键,`id` 作为值。
阅读全文