我是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流做到这一点?谢谢任何人回答我。
答案 0 :(得分:1)
好像您希望将每个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());
答案 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函数和流的混合,允许您将对象从一种类型转换为另一种类型。如果您有任何疑问,请告诉我,我很乐意为您提供帮助。快乐的编码。