mapList.stream().filter(m -> s.equals(m.get("name").toString())).collect(Collectors.toList()).size() > 0添加不为null判断
时间: 2024-02-05 19:14:19 浏览: 31
可以在调用 `filter` 方法前添加一个非空判断来避免空指针异常,例如:
```
mapList.stream()
.filter(m -> m.get("name") != null && s.equals(m.get("name").toString()))
.collect(Collectors.toList())
.size() > 0
```
这样就可以先判断 `name` 是否为 null,如果为 null 则不会调用 `toString` 方法,避免了空指针异常的发生。
相关问题
优化这段代码 for(String s : yearMonthList){ xAxis.add(s + "月"); if(mapList.stream().filter(m -> s.equals(m.get("date").toString())).collect(Collectors.toList()).size() > 0){ Map map = mapList.stream().filter(m -> s.equals(m.get("date").toString())).findFirst().get(); doubleList.add(Double.valueOf(map.get("count").toString())); }else { doubleList.add(0.0); } }
这段代码可以进行如下优化:
1. 使用一个 Map 来存储 mapList 中的数据,而不是每次都进行过滤查找,可以减少时间复杂度。
2. 使用 forEach 循环遍历 yearMonthList,而不是 for-each 循环,可以使代码更加简洁。
3. 在获取 count 值时,可以将其转换为 Double 类型,而不是先转换为字符串再转换为 Double 类型。
下面是优化后的代码:
```java
Map<String, Double> map = new HashMap<>();
mapList.forEach(m -> map.put(m.get("date").toString(), Double.valueOf(m.get("count").toString())));
yearMonthList.forEach(s -> {
xAxis.add(s + "月");
doubleList.add(map.getOrDefault(s, 0.0));
});
```
for (Entity e : rsList) { List<String> singleRecord = new ArrayList<>(); nameList.forEach(n -> singleRecord.add(e.get(n) == null ? "" : e.get(n).toString())); if (e.getMetadata().containsKey(ChargeConst.RATE_RULE_DETAIL)) { Set<Map<String, Object>> ruleDtls = (Set<Map<String, Object>>) e.getMetadata().get(ChargeConst.RATE_RULE_DETAIL); Map<Object, Object> mergedMap = ruleDtls.stream() .flatMap(map -> map.entrySet().stream().map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue() == null ? "" : entry.getValue()))) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> newValue)); final List<String> finalSingleRecord = singleRecord; valueList.add(IntStream.range(0, finalSingleRecord.size()).mapToObj( i -> finalSingleRecord.get(i).equals("") && mergedMap.get(nameList.get(i)) != null ? mergedMap.get(nameList.get(i)).toString() : finalSingleRecord.get(i)) .collect(Collectors.toList())); continue; } valueList.add(singleRecord); }降低代码复杂度
可以将代码分解为多个方法来降低复杂度,例如:
1. 提取一个方法来处理每个实体记录,将其转换为一个 String 类型的 List。
```
private List<String> processEntity(Entity e, List<String> nameList) {
List<String> singleRecord = new ArrayList<>();
nameList.forEach(n -> singleRecord.add(e.get(n) == null ? "" : e.get(n).toString()));
if (e.getMetadata().containsKey(ChargeConst.RATE_RULE_DETAIL)) {
Set<Map<String, Object>> ruleDtls = (Set<Map<String, Object>>) e.getMetadata().get(ChargeConst.RATE_RULE_DETAIL);
Map<Object, Object> mergedMap = mergeRuleDetails(ruleDtls);
final List<String> finalSingleRecord = singleRecord;
return IntStream.range(0, finalSingleRecord.size())
.mapToObj(i -> finalSingleRecord.get(i).equals("") && mergedMap.get(nameList.get(i)) != null ? mergedMap.get(nameList.get(i)).toString() : finalSingleRecord.get(i))
.collect(Collectors.toList());
}
return singleRecord;
}
```
2. 提取一个方法来合并所有规则细节的 Map。
```
private Map<Object, Object> mergeRuleDetails(Set<Map<String, Object>> ruleDtls) {
return ruleDtls.stream()
.flatMap(map -> map.entrySet().stream()
.map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue() == null ? "" : entry.getValue())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> newValue));
}
```
3. 将原来的主方法进行简化,使用上面的两个方法来处理每个实体记录,并将结果添加到 valueList 中。
```
for (Entity e : rsList) {
List<String> singleRecord = processEntity(e, nameList);
valueList.add(singleRecord);
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)