Collectors.toMap(e->e.getFixProjectCode()+"_"+e.getCode(),PmBuildingInfoInfo::getFixBuildingCode,(k1, k2) -> k2)
时间: 2024-04-11 17:32:45 浏览: 69
这是一个使用Java 8中的Collectors.toMap方法的示例。该方法用于将一个对象列表转换为一个Map,并指定了键和值的转换函数。在这个例子中,键是通过将`FixProjectCode`和`Code`拼接而成的字符串,值是`FixBuildingCode`属性的值。如果存在重复的键,我们使用了一个合并函数`(k1, k2) -> k2`来决定保留哪个值。
相关问题
优化这串代码:return Optional.ofNullable(command) .filter(this::isAccessory) .map(BaseCommand::getOrderCorrectResult) .map(OrderCorrectResult::getFinalProductLines) .map(resultList -> resultList.stream() .collect(Collectors.groupingBy(BatchCodeProductLine::getProductId , HashMap::new , Collectors.mapping(item -> item.getBatchCode().getBatchCode(), Collectors.toList()) ) ) ) .orElse(null);
可以将代码拆分成多个方法,让代码更易读:
```
public Map<String, List<String>> getProductBatchCodes(String command) {
return Optional.ofNullable(command)
.filter(this::isAccessory)
.map(BaseCommand::getOrderCorrectResult)
.map(OrderCorrectResult::getFinalProductLines)
.map(this::groupByProductId)
.orElse(null);
}
private Map<String, List<String>> groupByProductId(List<BatchCodeProductLine> resultList) {
return resultList.stream()
.collect(Collectors.groupingBy(
BatchCodeProductLine::getProductId,
HashMap::new,
Collectors.mapping(
item -> item.getBatchCode().getBatchCode(),
Collectors.toList()
)
));
}
private boolean isAccessory(String command) {
// TODO: 实现 isAccessory 方法
return true;
}
```
主要修改如下:
1. 将整个代码块拆分成了一个公共方法 `getProductBatchCodes` 和两个私有方法 `groupByProductId` 和 `isAccessory`。这样做可以让代码更易读,每个方法只做一件事情,可以更好地理解和维护。
2. 将 `resultList.stream()` 提取到了 `groupByProductId` 方法中,使得 `groupByProductId` 方法只关注如何对 `resultList` 进行分组操作。
3. 修改了 `Collectors.groupingBy` 的第二个参数,使用 `HashMap::new` 代替了 `() -> new HashMap<>()`,这样可以让代码更简洁。
Collectors.mapping(e -> deviceMap.get(e.getDeviceId()), Collectors.toList()) 出现了All elements are null
这个问题可能是因为 `deviceMap` 中不存在 `deviceRelatedList` 中某些元素的设备 ID,导致了 `deviceMap.get(e.getDeviceId())` 返回了 null,从而导致了 `mapping` 操作中的所有元素都是 null。
你可以在调用 `mapping` 之前先过滤掉 `deviceRelatedList` 中在 `deviceMap` 中不存在的设备 ID 对应的元素,或者在 `mapping` 操作中加入 null 值判断,避免出现空指针异常。
阅读全文