当前位置: 首页 > 知识库问答 >
问题:

如何使用lambda打印对象中的集合列表

孔波
2023-03-14

我有这样一堂课:

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<>();

现在我想打印所有参加课程的学生的所有科目名称。

我试过这样的方法,但它给了我错误:

参数类型字符串void的运算符未定义

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()))
                 )
    );

我不知道如何使第二个流返回每个学生的firstNamelastName的字符串。我可以将它映射到字符串,然后以某种方式收集它吗?第一个流中的类似内容?

subj.getStudents().stream()
           .map(stud->(stud.getFirstName()+ stud.getLastName() )
           .collect(Collectors.toString())

共有3个答案

孙京
2023-03-14

forEach方法id是void的类型。把你的陈述分成两部分。

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()))
                 )
    });
景稳
2023-03-14

由于您正在使用以下命令,因此出现了操作员错误:-

主语。GetSubjectBearner()。getLastName()“”sub。getStudents()。stream()。forEach(螺柱)-

操作员正在处理字符串和空格,因为第二部分创建学生流,然后处理它,没有返回任何字符串。

孟新知
2023-03-14

这是因为forEach不会产生任何结果(返回void)。因此,当您希望将某个内容连接到主题名称时,学生的第二个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()))
    });
 类似资料:
  • 这是一个非常基本的问题,我很确定我做错了什么,或者做了一些假设。开始了。 我正在写一个Jira插件,它使用Velocity模板系统。我有一个ResultRow对象列表,其中ResultRow是一个具有单个成员变量的类:String key: 结果和预期的一样:com.domain.jira.resultRow@7933F2C6。 我想我可能错过了课堂上的一些要求。是否需要以某种特殊的方式定义,以建

  • 请帮助将此类型打印为格式?

  • 我正在寻找为json对象中的所有字段打印jsonpath的Java API。需求的第一部分是,对于给定的json对象(或字符串)- 它应该以key-value的方式打印所有属性,其中key是字段的jsonpath。 输出应该如下所示- 等等。这将用于匹配来自另一个json对象的值(我的第二个需求)。 我找到了一个APIhttps://github.com/json-path/JsonPath,它有

  • 使用 Photoshop,您可以打印任何兼容的 3D 模型,而无需担心 3D 打印机的限制。在准备打印时,Photoshop 会自动使 3D 模型防水。Photoshop 还会生成必要的支撑结构(支架和底座),以确保您的 3D 打印能够成功完成。 准备打印 3D 对象 选择“窗口”>“工作区”>“3D”以切换到 3D 工作区。 在 Photoshop 中打开 3D 模型。如果需要,请在打开 3D

  • 问题内容: 好吧,这个交互式的python控制台代码段将告诉一切: 基本上,我想在打印列表时打印三个字符串。我也尝试过,但结果相同。 问题答案: 尝试: 并阅读此文档链接:

  • 问题内容: 我是Java的新手。我说,我有一个类 人 。我要列印 上面的代码给出如下输出: 这有什么意义? 该对象是否具有某种唯一标识? 我可以自定义吗?我的意思是编写自己的函数,该函数在打印时会输出? 如果是这样,我该怎么做? 问题答案: 如果要打印任何对象的有意义的内容,则必须实现自己的方法,该方法将覆盖parent()类的方法。默认情况下,所有类(无论您创建什么)都扩展类。 样例代码: 输出