java - 在JDK8中,我可以只使用一个流表达式来获得两个条件的结果吗?

标签 java java-8 java-stream

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

  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;
    }
}

最佳答案

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

Student res;

for (Student s : students) {
    if s.id == id -> { res = s; break; }
    if s.name == name -> res = s;
}

关于java - 在JDK8中,我可以只使用一个流表达式来获得两个条件的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73231815/

相关文章:

Java老年代一直在增长,直到Tomcat重启

java - "String[]::new"是什么意思?

java - 将 Arraylist<Integer> 转换为 char[] 的最佳方法是什么

java-8 - 为什么 java Map.merge 不通过供应商?

Java Streams – 如何按值分组并找到每组的最小值和最大值?

java - Java 项目中的 JAR 文件

java - org.postgresql.util.PSQLException : The column name usuario was not found in this ResultSet

java - 尽管使用共享首选项,如何保存cardView单击事件状态以保存其颜色

java - 从字符串中解析整数android java

java - 访问 Java 8 Lambda 表达式中的字段