繁体   English   中英

如何使用Java 8 Lambda将对象添加到其他列表中的列表中

[英]How to add object into a list inside of the other list using Java 8 lambdas

我对如何使用Java 8 lambda将对象添加到其他列表中的列表中有疑问。

让我解释:

我有以下对象:

类对象:

public class Course{

   private String courseNae;
   private List<Student> studentList;

   /*gets and sets */

}

学生对象:

public class Student{

   private String studentName;
   private List<Subject> subjectList;

       /*gets and sets */
}

主体对象:

public class Subject{

   private String subjectName;
   private String details;
   private double value;

       /*gets and sets */
}

我想这样做,但是使用java 8 lambda:

 for(Class course: this.courseList){
        for(Student std: course.getStudentList()){
            if(std.getStudentName().equals(name)) {
                std.getSubjectList()
                        .add(Subject.newBuilder()
                        .subjectName(infoName)
                        .details("fofofofof")
                        .value(10.0)
                        .build());
            }
        }
    }

一般来说:-我想在课程列表中找到学生的名字

  • 找到学生姓名后,我想在“主题”列表中添加一个新的主题信息。

这可能是您的问题的可能解决方案:

码:

courseList.stream()
          .map(Course::getStudentList)
          .flatMap(Collection::stream)
          .filter(student -> student.getStudentName().equals(name))
          .findFirst()
          .map(Student::getSubjectList)
          .ifPresent(subjectList -> subjectList.add(
              Subject.newBuilder()
                     .subjectName(infoName)
                     .details("fofofofof")
                     .value(10.0)
                     .build())
          );

说明:

  • .map(Course::getStudentList)将输入List<Course>转换为List<Student>的流
  • .flatMap(Collection::stream)将变平给定的List<Student>到流Student
  • .filter(...)将过滤流,以便仅对名称匹配的学生进行流处理
  • .findFirst()将找到给定流的第一项
  • .map(Student::getSubjectList)现在会将学生流转换为List<Subject>
  • 如果找到符合条件的匹配学生,将执行.ifPresent(...)

笔记:

  • 如下所示的方法调用: Course::getStudentList是所谓的方法引用。 在此处阅读有关它们的更多信息。
  • 在此处阅读有关流的更多信息
  • 在此处阅读有关Optional更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM