【问题标题】:Java 8 How to manipulate objects in one list and collect them in another list? [duplicate]Java 8 如何操作一个列表中的对象并将它们收集到另一个列表中? [复制]
【发布时间】:2018-02-27 18:58:31
【问题描述】:

我对 Java8 还很陌生。我需要将 POJO 列表转换为按特定条件分组并在 UI 上显示。

  • 将属于 Children 类别的对象列表转换为 Person 类别。
  • 返回列表。

    Children.java
    private String firstName;
    private String lastName;
    private String school;
    private String personId;
    // Setters and getters.
    
    Person.java
    private String fullName;
    private String address;
    // Setters and Getters.
    
    private Person convertChildToPerson(Children child) {
             Person person = new Person();
             person.setFullName(child.getLastName() + ", " + child.getFirstName());
              ..
              return person;
     } 
    

    .. 主要代码.. ..

    List<Person> personList;  // Is populated by other functions.
    
    // Connect to DB and gets the output
    List<Children> childrenList = (Children) criteria.list();  
    
    for(Children children: childrenList) {
         personList.add(convertChildToPerson(children));
    }
    return personList; 
    

    上面的 FOR-LOOP 不能用 Java 8 Streams 代替吗?

【问题讨论】:

  • 查看 Robert Bräutigam 的答案

标签: java lambda foreach java-8 java-stream


【解决方案1】:
 List<Person> newList = childrenList.stream()
             .map(this::convertChildToPerson)
             .collect(Collectors.toList());

 personList.addAll(newList);

Holger 建议的更短(更好):

childrenList.stream()
            .map(this::convertChildToPerson)
            .forEachOrdered(personList::add);

【讨论】:

  • 感谢尤金的回复。但是我已经有了由其他方法填充的 personList。我不能覆盖它......所以,我应该先做 personList1 = ..... 然后 personList.addAll(personList1) 吗?
  • @SrinivasLakshman 对,见编辑
  • forEachOrdered(personList::add) 也可以。在一次添加之前收集到一个新列表可能看起来更干净,但意味着需要临时存储。
  • @Holger 好建议,谢谢
猜你喜欢
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多