猿问

使用 Streams 将 List<Object> 转换为另一个 List

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


小怪兽爱吃肉
浏览 454回答 1
1回答

胡说叔叔

您可以使用Collectors.mappingalong with groupingByof samples(Sample而不是) 来获取它们关联的Object中间状态,并将每个此类条目映射为:List<User>idResultObjectList<ResultObject> resultObjects = samples.stream()&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.groupingBy(Sample::getId,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Collectors.mapping(a -> new User(a.getUserName(), a.getAddress(), a.getEmail()),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Collectors.toList())))&nbsp; &nbsp; &nbsp; &nbsp; .entrySet().stream()&nbsp; &nbsp; &nbsp; &nbsp; .map(e -> new ResultObject(e.getKey(), e.getValue()))&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());
随时随地看视频慕课网APP

相关分类

Java
我要回答