优化这串代码:Map<Long, List<BatchCodeProductLine>> collect = resultList.stream().collect(Collectors.groupingBy(BatchCodeProductLine::getProductId)); collect.keySet().forEach(productId -> { List<String> batchList = collect.get(productId).stream().map(batch -> batch.getBatchCode().getBatchCode()).collect(Collectors.toList()); mainBatchMap.put(productId, batchList); });
时间: 2024-01-27 07:03:42 浏览: 141
可以将代码进行简化和优化:
Map<Long, List<String>> mainBatchMap = resultList.stream()
.collect(Collectors.groupingBy(
BatchCodeProductLine::getProductId,
Collectors.mapping(
batch -> batch.getBatchCode().getBatchCode(),
Collectors.toList()
)
));
这个代码片段中,我们使用了 Collectors.groupingBy()
方法来将 resultList
按照 productId
进行分组,然后使用 Collectors.mapping()
方法对每个分组中的元素进行转换,生成一个批次列表,最后使用 Collectors.toList()
方法将这些批次列表收集到一个 List
中。
这种方式可以省略显式地创建一个 Map
对象,并且可以避免使用 forEach()
方法来遍历 Map
对象的键集合。
相关问题
优化这串代码:Map<Long, List<String>> mainBatchMap = resultList.stream() .collect(Collectors.groupingBy( BatchCodeProductLine::getProductId, Collectors.mapping( batch -> batch.getBatchCode().getBatchCode(), Collectors.toList() ) ));
可以尝试使用方法引用来简化代码,同时加上泛型声明和注释,使代码更加清晰易读:
Map<Long, List<String>> mainBatchMap = resultList.stream()
.collect(Collectors.groupingBy(
BatchCodeProductLine::getProductId, // 按 productId 分组
Collectors.mapping(
BatchCodeProductLine::getBatchCode, // 获取 batchCode
Collectors.toList() // 转为 list
)
));
另外,根据具体情况,可以考虑使用并行流来提高性能,但需要注意数据安全问题。
优化这串代码: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;
}
主要修改如下:
- 将整个代码块拆分成了一个公共方法
getProductBatchCodes
和两个私有方法groupByProductId
和isAccessory
。这样做可以让代码更易读,每个方法只做一件事情,可以更好地理解和维护。 - 将
resultList.stream()
提取到了groupByProductId
方法中,使得groupByProductId
方法只关注如何对resultList
进行分组操作。 - 修改了
Collectors.groupingBy
的第二个参数,使用HashMap::new
代替了() -> new HashMap<>()
,这样可以让代码更简洁。
相关推荐
















