Java 8 Stream:如何从列表中的一个列表属性获取新列表

时间:2018-04-12 03:12:02

标签: java-8 stream java-stream

我是java 8的新手,遇到问题困扰我很多: 我有一个如下列表:

List<objMain>

class objMain{
    Long rid;
    List<objUser> list;
    String rname;
}

class objUser{
    String userid;
}

现在,我想获得一个如下所示的新列表:

List<objUserMain>

class objUserMain{
    Long rid;
    String rname;
    String userid;
}

我如何通过java 8流做到这一点?谢谢任何人回答我。

2 个答案:

答案 0 :(得分:1)

好像您希望将每个objMain实例映射到objUserMain类型。

为了完成手头的任务,您需要使用flatMapmap然后收集到列表实现。

假设您有必要的getter和setter,那么您可以执行以下逻辑来获得所需的结果。

List<objUserMain> result = 
       objMainsList.stream()
                   .flatMap(obj -> obj.getList().stream().map(e -> {
                       objUserMain user = new objUserMain();
                       user.setRid(obj.getRid());
                       user.setRname(obj.getRname());
                       user.setUserid(e.getUserid());
                       return user;
                   })).collect(Collectors.toList());

答案 1 :(得分:0)

您可以通过以下方式使用流



    public static  List convert(List existing, Function func) {
        return existing.stream().map(func).collect(Collectors.toList());
    }

上述方法将帮助您将列表从一种对象类型转换为另一种对象类型。对此的参数是要转换的初始对象以及要用于转换的方法。在主类中导入以下内容



    import java.util.*;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    import java.util.function.*;


现在在您尝试转换的主类中按以下方式调用转换方法



    List result=convert(newList,
    l->{
    objUserMain r=new objUserMain();
    r.rid=l.rid;
    r.rname=l.rname;
    r.userid=l.list.get(0).userid;
    return r;});
    System.out.println(result.get(0).rid);
    System.out.println(result.get(0).rname);
    System.out.println(result.get(0).userid);


以上是lambda函数和流的混合,允许您将对象从一种类型转换为另一种类型。如果您有任何疑问,请告诉我,我很乐意为您提供帮助。快乐的编码。