Map<String, ApprovedSaleData> dapartMap = approvedSaleDataList.stream() .collect(Collectors.toMap(ApprovedSaleData::getDepartment, item -> item)); 这段代码怎么防止空指针异常
时间: 2024-02-21 19:00:19 浏览: 20
可以在Lambda表达式中进行空指针判断。例如,可以使用Optional类的ofNullable方法将item包装成Optional对象,然后使用orElse方法指定默认值,以防止空指针异常。修改后的代码如下:
```
Map<String, ApprovedSaleData> dapartMap = approvedSaleDataList.stream()
.collect(Collectors.toMap(ApprovedSaleData::getDepartment, item -> Optional.ofNullable(item).orElse(new ApprovedSaleData())));
```
在上述代码中,如果item为null,则Optional.ofNullable(item)返回一个空的Optional对象。然后我们使用orElse方法指定了一个默认值new ApprovedSaleData(),以确保在item为null的情况下,也能够将一个默认值放入Map中。
相关问题
Map<String, List<TBmwyResolvedevicedata>> map = dataList.stream().collect(Collectors.groupingBy(TBmwyResolvedevicedata::getEndTime)); 用冒泡排序对key大小排序
可以使用冒泡排序算法对Map中的key进行排序,具体步骤如下:
1. 将Map中的key转换为一个List集合;
2. 对List集合进行冒泡排序,按照key的大小进行比较排序;
3. 根据排好序的List集合,遍历Map,将key按照排好的顺序放入一个新的LinkedHashMap中;
4. 最后,将新的LinkedHashMap返回即可。
下面是示例代码实现:
```java
Map<String, List<TBmwyResolvedevicedata>> map = dataList.stream().collect(Collectors.groupingBy(TBmwyResolvedevicedata::getEndTime));
List<String> keys = new ArrayList<>(map.keySet());
for (int i = 0; i < keys.size() - 1; i++) {
for (int j = 0; j < keys.size() - i - 1; j++) {
if (keys.get(j).compareTo(keys.get(j + 1)) > 0) {
Collections.swap(keys, j, j + 1);
}
}
}
LinkedHashMap<String, List<TBmwyResolvedevicedata>> sortedMap = new LinkedHashMap<>();
for (String key : keys) {
sortedMap.put(key, map.get(key));
}
// sortedMap即为按照key排序后的Map
```
优化下段代码 Map<String, List<StkTransferOrderDtl>> collect = stkTransferOrderDtls.stream().collect(Collectors.groupingBy(StkTransferOrderDtl::getProjId)); collect.forEach((projId,stkTransferOrderDtlList)->{ List<String> bigClassCodes = stkTransferOrderDtlList.stream().map(p->{ return p.getMatCode().substring(0,2); }).distinct().collect(Collectors.toList()); for (String bigClassCode : bigClassCodes) {}
可以尝试将两个Stream合并成一个来提高效率,代码如下:
```
Map<String, List<String>> collect = stkTransferOrderDtls.stream()
.collect(Collectors.groupingBy(StkTransferOrderDtl::getProjId,
Collectors.mapping(p -> p.getMatCode().substring(0, 2),
Collectors.collectingAndThen(Collectors.toSet(), ArrayList::new))));
collect.forEach((projId, bigClassCodes) -> {
for (String bigClassCode : bigClassCodes) {
// do something
}
});
```
这里使用了`Collectors.mapping()`和`Collectors.collectingAndThen()`方法来进行分组和去重操作,同时将结果转换为ArrayList,以便后续的遍历操作。