【问题标题】:Java : use Streams to convert List<Object> to another List<anotherObject>Java:使用 Streams 将 List<Object> 转换为另一个 List<anotherObject>
【发布时间】:2019-08-08 15:26:57
【问题描述】:

我有以下问题。我熟悉使用 java 7 执行以下操作的传统方法,但尝试使用 java8 流或 forEach 来完成此操作以获得更好的可读性和更少的代码行。

对象:

 public class Object {
   private String id;
   private String userName;
   private String address;
   private String email;
 //getters and setters
}

现在,我有一个对象列表,如下所示:

List<Object> list = new ArrayList<>();
Object obj = new Object();
obj.setId(12);
obj.setUserName("myName");
obj.setAddress("address");
obj.setEmail("email");

Object obj1 = new Object();
obj1.setId(12);
obj1.setUserName("myName1");
obj1.setAddress("address1");
obj1.setEmail("email1");
list.add(obj);
list.add(obj1);

我有另一个对象用户:

public class User {
      private String userName;
       private String address;
       private String email;
   //getters and setters
}

结果对象:

public class ResultObject{
     private String id;
     private List<User> user;
   //getters and setters
}

现在对于列表中的每个对象,我想按 id 对它们进行分组,并将相应的电子邮件、地址和用户名保存在用户对象中,最后想要一个 id 映射到同一 ID 下的用户列表的列表。

所以上面示例的 ResultObject 应该是这样的:

id=12
List<User> = {["myname","address","email"],["myname1","address1","email1"]}

任何想法都值得赞赏。 TIA。

【问题讨论】:

    标签: java foreach java-8 java-stream


    【解决方案1】:

    您可以使用Collectors.mappinggroupingBy 样本(Sample 而不是Object)来获得List&lt;User&gt; 的中间状态与id 关联,并映射每个这样进入ResultObject 为:

    List<ResultObject> resultObjects = samples.stream()
            .collect(Collectors.groupingBy(Sample::getId,
                    Collectors.mapping(a -> new User(a.getUserName(), a.getAddress(), a.getEmail()),
                            Collectors.toList())))
            .entrySet().stream()
            .map(e -> new ResultObject(e.getKey(), e.getValue()))
            .collect(Collectors.toList());
    

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多