繁体   English   中英

Java:使用流转换列表 <Object> 到另一个列表 <anotherObject>

[英]Java : use Streams to convert List<Object> to another List<anotherObject>

我有以下问题。 我熟悉使用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
}

ResultObject:

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

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

因此,以上示例的ResultObject应该类似于:

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

任何想法表示赞赏。 TIA。

您可以将Collectors.mappinggroupingBy一起使用( Sample而不是Object )来获取List<User>的中间状态以及其关联的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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM