求遍历对象列表的Java Stream等效实现代码,不可将studentFinalList设为final
Java Stream 等效实现
首先给出完全对齐原代码逻辑的版本,不需要将studentFinalList定义为final:
import java.util.stream.Collectors; // 核心实现 List<Student> studentFinalList = StudentList.stream() .filter(ep -> { if (StringUtils.isBlank(ep.getName()) && ep.getName() == null) { return true; } else if (StringUtils.isNotBlank(ep.getName()) && !ep.getName().equals("") && ep.getName() != null) { return sIdList.contains(ep.getId()); } return false; }) .collect(Collectors.toList());
补充说明
你原代码中的判断条件存在冗余,可以简化后得到更简洁的Stream版本,逻辑完全等价:
StringUtils.isBlank()本身已覆盖name == null、空字符串、全空白字符的判断,原第一个if分支只有name == null时会命中StringUtils.isNotBlank()本身已覆盖name != null、非空字符串、非全空白字符的判断,原第二个if分支的后两个判断可省略
简化版实现:
List<Student> studentFinalList = StudentList.stream() .filter(ep -> ep.getName() == null || (StringUtils.isNotBlank(ep.getName()) && sIdList.contains(ep.getId()))) .collect(Collectors.toList());
注:上述两个版本都和原逻辑一致,
name为空字符串/全空白且不为null的学生不会被加入结果列表。
内容的提问来源于stack exchange,提问作者Tech Travellers
相关产品推荐
相关产品推荐

