我有以下问题。我熟悉使用 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=12List<User> = {["myname","address","email"],["myname1","address1","email1"]}任何想法表示赞赏。TIA。
1 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
您可以使用Collectors.mappingalong with groupingByof samples(Sample而不是) 来获取它们关联的Object中间状态,并将每个此类条目映射为:List<User>idResultObject
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());
添加回答
举报
0/150
提交
取消