使用流展平Java对象
我有一门课是这样的: 班级学生{ 字符串名; 弦年龄; 列出课程; } 班级课程{ 字符串courseName; 弦乐教师; } 我有: 列出学生名单 我想得到: 列出对象 有这样的价值观:使用流展平Java对象,java,java-8,java-stream,flatten,Java,Java 8,Java Stream,Flatten,我有一门课是这样的: 班级学生{ 字符串名; 弦年龄; 列出课程; } 班级课程{ 字符串courseName; 弦乐教师; } 我有: 列出学生名单 我想得到: 列出对象 有这样的价值观: Kevin 22 CS Rob Kevin 22 MT Chris Mary 21 AT Harry Mary 21 AP Henry Mary 21 PP Joe Prak 25 null null 使用Java8流最简单的方法是什么? flatMap
Kevin 22 CS Rob
Kevin 22 MT Chris
Mary 21 AT Harry
Mary 21 AP Henry
Mary 21 PP Joe
Prak 25 null null
使用Java8流最简单的方法是什么?
flatMap能帮忙吗
看最后一个。即使Prak没有参加任何课程,即列表为空,我也希望获得记录,只有学生和其他人如果你想将新对象展平,是的,flatMap和map的组合将起作用,但检查列表是否为空:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Test1 {
public static void main(String[] args) {
Course course1 = new Course("course 1", "teacher 1");
Course course2 = new Course("course 2", "teacher 2");
Course course3 = new Course("course 3", "teacher 3");
Course course4 = new Course("course 4", "teacher 4");
Student student1 = new Student("name 1", "15", Arrays.asList(course1, course2, course3, course4));
Student student2 = new Student("name 2", "16", new ArrayList<>());
Student student3 = new Student("name 2", "16", Arrays.asList(course1, course3));
Student student4 = new Student("name 4", "17", new ArrayList<>());
List<Student> students = Arrays.asList(student1, student2, student3, student4);
List<Objects> objects = students.stream().flatMap(student ->
student.getCourses().isEmpty() ?
Stream.of(new Objects(student.getName(), student.getAge(), null, null)) :
student.getCourses().stream().map(course -> new Objects(student.getName(), student.getAge(), course.getCourseName(), course.getTeacher()))
).collect(Collectors.toList());
objects.forEach(System.out::println);
}
}
class Course {
String courseName;
String teacher;
public Course(String courseName, String teacher) {
this.courseName = courseName;
this.teacher = teacher;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
}
class Student {
String name;
String age;
List<Course> courses;
public Student(String name, String age, List<Course> courses) {
this.name = name;
this.age = age;
this.courses = courses;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
}
class Objects{
String name;
String age;
String courseName;
String teacher;
public Objects(String name, String age, String courseName, String teacher) {
this.name = name;
this.age = age;
this.courseName = courseName;
this.teacher = teacher;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
@Override
public String toString() {
return "name: " + this.name + " age: " + this.age + " course name: " + this.getCourseName() + " teacher: " + this.getTeacher();
}
}
请看下面的代码,我也在底部粘贴了输出。在这里,我们可以使用具有四个字符串实例变量的某个对象的列表,而不是使用列表 列表c1=Arrays.aslistnewcoursecs、Rob、newcoursemt、Chris
List<Course> c2= Arrays.asList(new Course("AT", "Harry"), new Course("AP","Henry"), new Course("PP", "Joe"));
List<Course> c3= Arrays.asList(new Course());
List<Student> s1= Arrays.asList(new Student("Kevin", "22", c1), new Student("Mary", "21", c2), new Student("Prak", "25", c3));
List<String> list= s1.stream().flatMap(s-> s.getCourses().stream().map(d1-> s.getName()+" "+s.getAge()+" "+""+d1.getCourseName()+" "+d1.getTeacher()) ).collect(Collectors.toList());
list.forEach( System.out::println);
输出:
凯文22 CS罗布
凯文22米克里斯
玛丽21岁,哈利21岁
玛丽·亨利
玛丽21页乔
普拉克25空
List<Course> c2= Arrays.asList(new Course("AT", "Harry"), new Course("AP","Henry"), new Course("PP", "Joe"));
List<Course> c3= Arrays.asList(new Course());
List<Student> s1= Arrays.asList(new Student("Kevin", "22", c1), new Student("Mary", "21", c2), new Student("Prak", "25", c3));
List<String> list= s1.stream().flatMap(s-> s.getCourses().stream().map(d1-> s.getName()+" "+s.getAge()+" "+""+d1.getCourseName()+" "+d1.getTeacher()) ).collect(Collectors.toList());
list.forEach( System.out::println);