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

Java 8 Java8流:如何从列表中的一个列表属性获取新列表,java-8,stream,java-stream,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;

我刚接触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;
}
列表
类objMain{
长柄;
名单;
字符串rname;
}
类objUser{
字符串用户标识;
}
现在,我想得到一个新的列表,如下所示:

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;
}
列表
objUserMain类{
长柄;
字符串rname;
字符串用户标识;
}

如何通过Java8流实现这一点?谢谢任何人回答我。

您可以通过以下方式使用流来完成此操作



    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函数和流的混合,允许您将对象从一种类型转换为另一种类型。如果您有任何疑问,请告诉我,我很乐意为您提供帮助。愉快的编码。

似乎您希望将每个
objMain
实例映射到
objUserMain
类型

为了完成手头的任务,您需要将
flatMap
map
一起使用,然后收集到列表实现中

假设您在必要的地方有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());
列表结果=
objMainsList.stream()
.flatMap(obj->obj.getList().stream().map(e->{
objUserMain user=新的objUserMain();
user.setRid(obj.getRid());
user.setRname(obj.getRname());
setUserid(例如getUserid());
返回用户;
})).collect(Collectors.toList());

非常感谢!现在我有另一个问题:如何按objUser.userid对列表进行排序。排序(Comparator.comparing(objMain::getList))不起作用。@KLSun是否要对初始列表而不是结果列表进行排序?对不起,我忘了。这次,objUser不是一个列表,而是一个对象。应该避免使用原始类型。相反,使用泛型。