这是我的代码,但我发现它并不好.在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;
    }
}

推荐答案

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

Student res;

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

Java相关问答推荐

如何在Java中声明未使用的变量?

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

对某一Hyroby控制器禁用@cacheable

当我已经安装了其他版本的Java时,如何在Mac OSX 14.3.1上安装Java 6?

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

使用Spring Boot3.2和虚拟线程的并行服务调用

Java流传输一个列表并创建单个对象

如何在Java记录中设置BigDecimal类型属性的精度?

在settings.gradle.kts和Build.gradle.kts中使用公共变量

AbstractList保证溢出到其他方法

AWS Java SDK v2.x中没有setObjectAcl方法

Oracle中从JSON中提取和插入数据

在线程Java中调用Interrupt()之后调用Join()

Java集合:NPE,即使没有添加空值

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

如何在Java中正确实现填字游戏求解器

Jackson YAML:支持锚点扩展/覆盖

Spring Integration SFTP 连接失败 - 无法协商 kex 算法的密钥交换