2017-08-10 46 views
1

我正在学习Java Streams并想用java 8功能替换下面的代码。用Java流替换内部for循环

我能够使用stream.filter()和stream.map功能,但我无法用java 8功能替换下面的代码。

List<Subject> subjects= null; 
Set<SubjectData> subjectData= new SubjectData(); 
for (String name: studentNames) 
{ 
    //subjects = student.getSubjects(name); 
    // consider instead of above line , which returns a collection of <Subject> 
    for (Subject subject : subjects) 
    { 
     subjectData.add(new SubjectData(subject.syllabus(), subject.code())); 
    } 
} 

任何指针将不胜感激

+1

当然,你的意思是'new HashSet <>()'? –

+0

'学生'从哪里来? –

+0

yes此代码的输出应为所有学生返回的集合(存在于外循环中) – Mahiz

回答

2

我想象这样的事情是你打算什么:

Set<SubjectData> subjectData = studentNames.stream() 
     .flatMap(name -> student.getSubjects(name).stream()) 
     .map(subject -> new SubjectData(subject.syllabus(), subject.code())) 
     .collect(Collectors.toSet()); 

此流的学生姓名,将它们映射到他们的臣民而串联这些流,并然后为每个对象创建SubjectData对象。最后,这些对象被收集到一个集合中。