我有一个这样的班级:
public class Subject extends Entitet{
private String personalID;
private String name;
private Integer ECTS;
private Profesor subjectBearer;
private Set<Student> students;
//all getters and seters
在主体中,我创建了一个包含所有主题的列表。
List<Subjet> subjets= new ArrayList<>();
现在我想将所有学科的名称打印给所有 上课。
我尝试了类似的方法,但是它给了我错误:
未定义参数类型的运算符+字符串,无效
subjets.stream()
.forEach(subj-> System.out.println(subj.getSubjectBearer().getName()+ " " + subj.getSubjectBearer().getLastName()+" "+
subj.getStudents().stream()
.forEach(stud->System.out.println(stud.getName()+" "+stud.getLastName()))
)
);
我不知道如何使第二个流返回每个学生的firstName
和lastName
的字符串。我可以将其映射到字符串然后以某种方式收集它吗?
在第一流中是这样的吗?
subj.getStudents().stream()
.map(stud->(stud.getFirstName()+ stud.getLastName() )
.collect(Collectors.toString())
答案 0 :(得分:3)
这是因为forEach
不会产生任何结果(返回空白)。因此,您希望学生将第二个forEach
与主题名称串联在一起时,不会返回任何内容。
您可以:
返回所有学生的字符串
subjets.stream()
.forEach(subj-> System.out.println(
subj.getSubjectBearer().getName()+ " " +
subj.getSubjectBearer().getLastName()+" "+
subj.getStudents().stream()
.map(stud->stud.getName()+" "+stud.getLastName())
.collect(Collectors.joining(","))
));
或不连接而显示名称:
subjets.stream()
.forEach(subj-> {
System.out.println(subj.getSubjectBearer().getName()+ " " + subj.getSubjectBearer().getLastName());
subj.getStudents().stream()
.forEach(stud->System.out.println(stud.getName()+" "+stud.getLastName()))
});
答案 1 :(得分:0)
由于您正在使用+,所以发生+运算符错误:-
subj.getSubjectBearer()。getLastName()+“ ” + subj.getStudents()。stream()。forEach(stud-> System.out.println(stud.getName()+“” + stud.getLastName())) )
+运算符正在处理String和void,因为创建学生流然后对其进行处理的第二部分不会返回任何String。
答案 2 :(得分:0)
forEach方法ID是void类型。将您的陈述分为两个陈述。
file
答案 3 :(得分:0)
您很近,尝试这样的事情:
subjets.stream()
.forEach(subj-> System.out.println(subj.getSubjectBearer().getName() + " "
+ subj.getSubjectBearer().getLastName() + " " + subj.getStudents()
.stream()
.map(stud -> stud.getName() + " " + stud.getLastName())
.collect(Collectors.joining(",")));
答案 4 :(得分:0)
在您的问题中,您的属性/方法中有一些拼写错误的名称,但我想它不在您的源代码中。
我认为您应该只使用System.out一次,并因此首先以这种方式创建String演示文稿:
System.out.println(subjets.stream()
.map(subj-> (subj.getName()+ " " + subj.getLastName() + " \n\t" +
subj.getStudents().stream().map(
stud->stud.getFirstName() + " " + stud.getLastName()).collect(Collectors.joining(","))
)
).reduce("", String::concat)
);
您可以根据需要调整分隔符。
如果您需要进一步的说明,请告诉我。
答案 5 :(得分:0)
subjets.stream() .forEach(subj-> { System.out.println(subj.getSubjectBearer()。getName()+“” + subj.getSubjectBearer()。getLastName()); subj.getStudents()。stream() .forEach(stud-> System.out.println(stud.getName()+“” + stud).getLastName());
});
我已更正您的代码。请尝试,它应该可以工作
错误原因是在System.out.println内部,您正在调用无法发生的流。SOP接受需要分开的字符串对象。 第二件事是每个接受消费者的多个语句添加大括号,对于每个语句,请在结尾加上;
答案 6 :(得分:0)
可能有帮助:
listEntries.stream()
.map(obj -> obj.getName()).collect(Collectors.toList()));