JDK8中可以只用一个流表达式来得到两个条件的结果吗?

Reb*_*cca 2 java java-8 java-stream

这是我的代码,但我发现它不好。在JDK8中我可以只使用一个流表达式来获得两个条件的结果吗?我想确保id条件是第一个,名称条件是第二个。

  public Student getStudent(String id,String name)  {
    try {
        List<Student> students = studentDao.getStudent();
        if (CollectionUtils.isNotEmpty(students)) {
            Student studentDomain=students.stream()
                    .filter(p -> id .equals(p.getId()))
                    .findAny().orElse(null);
            if(studentDomain==null){
                studentDomain=students.stream()
                        .filter(p -> name.equals(p.getName()))
                        .findAny()
                        .orElse(null);
            }
            return studentDomain;
        } else {
            return null;
        }
    }catch (Exception ex){ 
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

vla*_*huk 6

流不应该被过度使用,有时返回循环是有意义的。在你的情况下foreach会更简单更好。类似于(伪代码):

Student res;

for (Student s : students) {
    if s.id == id -> { res = s; break; }
    if s.name == name -> res = s;
}
Run Code Online (Sandbox Code Playgroud)

  • Op 在他们的方法中使用了 findAny(),这表明这是无关紧要的。 (2认同)