Map<String,String> orginfoMap = orgInfos.stream().collect(Collectors.toMap(OrgInfo::getPathCode,OrgInfo::getFinacialCode));的getFinacialCode空指针
时间: 2023-11-27 09:53:38 浏览: 74
这个问题可能是因为 `orgInfos` 中某个 `OrgInfo` 对象的 `getFinacialCode()` 方法返回了 `null`,导致了空指针异常。你可以在调用 `getFinacialCode()` 方法之前,先判断一下该对象是否为 `null`,或者在 `toMap` 中使用一个 lambda 表达式,将 `null` 值转换为一个默认值,例如:
```
Map<String, String> orginfoMap = orgInfos.stream()
.collect(Collectors.toMap(OrgInfo::getPathCode, orgInfo -> orgInfo.getFinacialCode() != null ? orgInfo.getFinacialCode() : ""));
```
这样,如果某个 `OrgInfo` 对象的 `getFinacialCode()` 方法返回了 `null`,那么对应的 `value` 就会被设置为一个空字符串。你也可以根据实际需求,将 `null` 转换成其他默认值。
相关问题
List<ZbcQsjdrzlbaTjQueryResult> queryResultList = zbglXtZbcjsjgMapper.queryjdrzlZzdw(zbcQsjdrzlbaTjQueryParam); Map<String, String> jdrzlRybmMap = queryResultList.stream().collect(Collectors.toMap(ZbcQsjdrzlbaTjQueryResult::getRybm , ZbcQsjdrzlbaTjQueryResult::getDwbm)); Map<String, String> jdrzlDwmcMap = queryResultList.stream().collect(Collectors.toMap(ZbcQsjdrzlbaTjQueryResult::getRybm , ZbcQsjdrzlbaTjQueryResult::getDwmc)); 优化一下代码
可以考虑将两个stream的操作合并为一个,避免重复遍历queryResultList。具体实现如下:
```
Map<String, String> jdrzlRybmMap = new HashMap<>();
Map<String, String> jdrzlDwmcMap = new HashMap<>();
queryResultList.forEach(result -> {
jdrzlRybmMap.put(result.getRybm(), result.getDwbm());
jdrzlDwmcMap.put(result.getRybm(), result.getDwmc());
});
```
这样可以将查询结果只遍历一次,并且使用forEach代替了stream操作,提高了代码的性能和可读性。
Map<Long, String> idMap = list.stream().collect(Collectors.toMap(EntryDeliveryBillMaterialUpdateBatchNoVO::getId, EntryDeliveryBillMaterialUpdateBatchNoVO::getBatchNo)); Map<Long,Date> dateMap = list.stream().collect(Collectors.toMap(EntryDeliveryBillMaterialUpdateBatchNoVO::getId, EntryDeliveryBillMaterialUpdateBatchNoVO::getProduceDate));怎么转成一个map
要将这两个 `Map` 合并为一个,可以使用 `Stream` 的 `collect` 方法,结合 `Collectors.toMap` 和 lambda 表达式来实现。具体代码如下:
```
Map<Long, Map<String, Object>> resultMap = list.stream().collect(Collectors.toMap(
EntryDeliveryBillMaterialUpdateBatchNoVO::getId,
vo -> {
Map<String, Object> subMap = new HashMap<>();
subMap.put("batchNo", vo.getBatchNo());
subMap.put("produceDate", vo.getProduceDate());
return subMap;
},
(map1, map2) -> {
map1.putAll(map2);
return map1;
}
));
```
上述代码中,使用 `Collectors.toMap` 将 `idMap` 和 `dateMap` 合并为一个 `Map`,其中 `EntryDeliveryBillMaterialUpdateBatchNoVO::getId` 作为 `keyMapper`,返回 `id` 作为 `key`;lambda 表达式 `vo -> {...}` 作为 `valueMapper`,返回一个包含 `batchNo` 和 `produceDate` 的子 `Map` 作为 `value`。由于 `Map` 的 `merge` 方法只能用于合并相同类型的 `Map`,所以在合并时需要提供一个 `mergeFunction`,将两个子 `Map` 合并为一个。这里使用的是 `(map1, map2) -> {...}` lambda 表达式,将两个子 `Map` 中的所有键值对合并到第一个子 `Map` 中,然后返回第一个子 `Map`。
阅读全文