为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2023-05-24 16:00:37
我有以下问题。我熟悉使用 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());


查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 453 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信