我怀疑如何使用Java 8 lambdas将对象添加到另一个列表中的列表中。
让我解释一下:
我有以下对象:
类对象:
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());
}
}
}
一般情况下: - 我想在我的课程列表
中找到这个名字答案 0 :(得分:2)
这可能是您问题的可能解决方案:
<强>代码:强>
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(...)
注意: