Java 8 用Java流替换内部for循环

Java 8 用Java流替换内部for循环,java-8,Java 8,我正在学习Java Streams,希望用Java 8特性替换下面的代码 List<Subject> subjects= null; Set<SubjectData> subjectData= new SubjectData(); for (String name: studentNames) { //subjects = student.getSubjects(name); // consider instead of above line , whic

我正在学习Java Streams,希望用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()));
    }
}
我能够使用stream.filter()和stream.map特性,但我无法用Java8特性替换下面的代码

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()));
    }
}
列表主题=null;
Set subjectData=新建subjectData();
for(字符串名称:studentNames)
{
//subjects=student.getSubjects(名称);
//考虑上面的行,它返回一个集合
用于(主题:主题)
{
subjectData.add(新的subjectData(subject.提纲(),subject.code());
}
}

任何指点都将不胜感激

我想这就是你想要的:

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

这将对学生姓名进行流式处理,在连接这些流的同时将其映射到主题,然后为每个流创建
SubjectData
对象。最后,这些对象被收集到一个集合中。

当然,你的意思是
new HashSet()
student
来自哪里?是的,此代码的输出应该返回所有学生的集合(在外部for循环中存在)student是类级对象
set subjectData=new subjectData()-我们无法帮助您转换甚至无法编译的代码。