【java链式调用流操作】
java链式调用流操作
- java链式调用流操作
- 关键点说明
- 合并逻辑:
- 优化细节:
- 性能提升:
java链式调用流操作
在Java中,可以将这两行代码合并成一行,通过链式调用流操作并利用Collectors.collectingAndThen一步完成过滤和去重。以下是合并后的代码:
gongkuangStatusListOld = gongkuangStatusListOld.stream().filter(g -> g.getPscId() != null && !g.getPscId().equals(0L) && g.getUnitcd() != null && !g.getUnitcd().isEmpty()).collect(Collectors.collectingAndThen(Collectors.toMap(obj -> (obj.getScprodId() + obj.getPscId() + obj.getUnitcd()), // 拼接keyobj -> obj, (obj1, obj2) -> obj1 // 重复时保留第一个),map -> new ArrayList<>(map.values()) // 直接提取map的值并转为List));
关键点说明
合并逻辑:
先执行filter:过滤掉pscId为null/0或unitcd为null/空字符串的对象。
再用collectingAndThen:将后续的toMap和转换操作合并为一个步骤,避免多次流操作。
优化细节:
使用 !g.getUnitcd().isEmpty() 替代 !g.getUnitcd().equals(“”),更简洁高效。
通过 map -> new ArrayList<>(map.values()) 直接提取去重后的值并转为List,无需额外调用stream()。
性能提升:
原始代码遍历了两次流(先过滤后去重),合并后只需一次流操作,效率更高。