需要 java 流中的等效代码来迭代对象列表
Need a equivalent code in java streams for iterating list of Object
谁能帮我写出流等效代码
注意:- 我无法将 studentFinalList 设置为“final”
List<Student> studentFinalList=new ArrayList<>();
for (Student ep:StudentList) {
if (StringUtils.isBlank(ep.getName()) && ep.getName() == null) {
studentFinalList.add(ep);
}
else if (StringUtils.isNotBlank(ep.getName()) &&
!ep.getName().equals("") && ep.getName() != null) {
if (sIdList.contains(ep.getId())) {
studentFinalList.add(ep);
}
}
}
您可以将所有 if 语句放在一个 filter
:
List<Student> studentFinalList = studentList.stream()
.filter(ep -> (StringUtils.isBlank(ep.getName()) && ep.ep.getName() == null) ||
(StringUtils.isNotBlank(ep.getName()) && !ep.getName().equals("") &&
ep.getName() != null && sIdList.contains(ep.getId())))
.collect(Collectors.toList());
虽然我建议仔细检查您提交的代码,因为我怀疑它包含一些错误,例如 ep.ep.getName()
。
代码中的某些条件似乎是多余的,可以在不影响逻辑的情况下删除:
StringUtils.isBlank(ep.getName()) && ep.getName() == null
可能会缩短为 ep.getName() == null
- 因为 StringUtils.isBlank
检查 null、空或纯空格字符串
StringUtils.isNotBlank(ep.getName()) && !ep.getName().equals("") && ep.getName() != null
- 无需检查 !name.equals("")
和 null
,因此仅 StringUtils.isNotBlank(ep.getName())
就足够了。
接下来,id列表sIdList
应该被转换成集合,以便于查找id(集合中的O(1)
而不是列表中的O(N)
)。
因此,代码可以简化为:
Set<String> sIdSet = new HashSet<>(sIdList);
List<Student> studentFinalList = studentList
.stream()
.filter(ep -> ep.getName() == null
|| (!StringUtils.isBlank(ep.getName()) && sIdSet.contains(ep.getId()))
)
.collect(Collectors.toList());
谁能帮我写出流等效代码 注意:- 我无法将 studentFinalList 设置为“final”
List<Student> studentFinalList=new ArrayList<>();
for (Student ep:StudentList) {
if (StringUtils.isBlank(ep.getName()) && ep.getName() == null) {
studentFinalList.add(ep);
}
else if (StringUtils.isNotBlank(ep.getName()) &&
!ep.getName().equals("") && ep.getName() != null) {
if (sIdList.contains(ep.getId())) {
studentFinalList.add(ep);
}
}
}
您可以将所有 if 语句放在一个 filter
:
List<Student> studentFinalList = studentList.stream()
.filter(ep -> (StringUtils.isBlank(ep.getName()) && ep.ep.getName() == null) ||
(StringUtils.isNotBlank(ep.getName()) && !ep.getName().equals("") &&
ep.getName() != null && sIdList.contains(ep.getId())))
.collect(Collectors.toList());
虽然我建议仔细检查您提交的代码,因为我怀疑它包含一些错误,例如 ep.ep.getName()
。
代码中的某些条件似乎是多余的,可以在不影响逻辑的情况下删除:
StringUtils.isBlank(ep.getName()) && ep.getName() == null
可能会缩短为ep.getName() == null
- 因为StringUtils.isBlank
检查 null、空或纯空格字符串StringUtils.isNotBlank(ep.getName()) && !ep.getName().equals("") && ep.getName() != null
- 无需检查!name.equals("")
和null
,因此仅StringUtils.isNotBlank(ep.getName())
就足够了。
接下来,id列表sIdList
应该被转换成集合,以便于查找id(集合中的O(1)
而不是列表中的O(N)
)。
因此,代码可以简化为:
Set<String> sIdSet = new HashSet<>(sIdList);
List<Student> studentFinalList = studentList
.stream()
.filter(ep -> ep.getName() == null
|| (!StringUtils.isBlank(ep.getName()) && sIdSet.contains(ep.getId()))
)
.collect(Collectors.toList());