cabinList.stream().filter(t->map.get(t)!=null&&map.get(t).getInd().indexOf("P")<0).count();
时间: 2024-04-20 13:23:16 浏览: 116
这段代码是在对`cabinList`列表进行流操作,使用`filter`方法筛选符合条件的元素,并使用`count`方法统计结果数量。条件是:`map.get(t)`不为空并且`map.get(t).getInd().indexOf("P")<0`,即`map`中`t`对应的值不为空且其`ind`属性不包含字母"P"。
简而言之,这段代码的目的是统计满足条件的非空元素的数量。
相关问题
解释下面代码的意思: 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`的大小从大到小排序,最终返回排好序的列表。
优化以下代码 JSONArray jsonArray = JSONArray.parseArray(jsonObject.getString("logTimeJson")); Map<String, Long> bbb = (Map<String, Long>) jsonArray.stream() .filter(map -> ((Map<String,Long>)map).get("vehicleTime") <= occurredOn.getTime()) .min(Comparator.comparingLong(map1 -> occurredOn.getTime() - ((Map<String,Long>)map1).get("vehicleTime"))) .orElse(null); Long time = occurredOn.getTime()-(bbb.get("vehicleTime")-bbb.get("thirdTime"));
可以考虑以下优化:
1. 避免频繁类型转换:可以在读取 jsonArray 时将其转换为 List<Map<String, Long>> 类型,避免多次类型转换。
2. 避免重复计算:可以将 occurredOn.getTime() 提前计算并保存,避免重复计算。
优化后的代码如下:
```
List<Map<String, Long>> list = JSONArray.parseArray(jsonObject.getString("logTimeJson"), Map.class);
long occurredOnTime = occurredOn.getTime();
Map<String, Long> bbb = list.stream()
.filter(map -> map.get("vehicleTime") <= occurredOnTime)
.min(Comparator.comparingLong(map1 -> occurredOnTime - map1.get("vehicleTime")))
.orElse(null);
if (bbb != null) {
Long time = occurredOnTime - (bbb.get("vehicleTime") - bbb.get("thirdTime"));
}
```
阅读全文