将现有Java for循环代码转换为功能等价的Stream流或for-each循环
Java代码转换实现方案
原代码本身已经是for-each循环结构,以下提供逻辑完全等价的优化版for-each实现,以及Stream流两种实现方式:
1. 优化版for-each实现
使用Map原生merge方法简化多层判断逻辑,代码更简洁易读,和原功能完全一致:
for (Studentauditlog st : studentauditloglist) { String columnValue = callEntityGetterMethod(st, column); if (StringUtils.isNotBlank(columnValue)) { // merge方法自动处理key存在/不存在、值为null的场景,逻辑和原代码完全匹配 response.merge(columnValue, 1L, Long::sum); } }
2. Stream流实现
2.1 直接更新已有response的写法
studentauditloglist.stream() .map(st -> callEntityGetterMethod(st, column)) .filter(StringUtils::isNotBlank) .forEach(columnValue -> response.merge(columnValue, 1L, Long::sum));
2.2 无副作用的函数式写法(推荐)
先统计本次列表的计数结果,再批量合并到已有response,符合Stream无副作用的规范:
import java.util.function.Function; import java.util.stream.Collectors; // 先统计当前列表的有效字段计数 Map<String, Long> tempCountMap = studentauditloglist.stream() .map(st -> callEntityGetterMethod(st, column)) .filter(StringUtils::isNotBlank) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); // 合并统计结果到原有response tempCountMap.forEach((k, v) -> response.merge(k, v, Long::sum));
内容的提问来源于stack exchange,提问作者Tech Travellers
相关产品推荐
相关产品推荐

