Java 8 Java8流:如何从列表中的一个列表属性获取新列表
我刚接触java 8,遇到了一个困扰我很多的问题: 我的清单如下: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;
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不是一个列表,而是一个对象。应该避免使用原始类型。相反,使用泛型。