【发布时间】:2020-01-21 04:16:13
【问题描述】:
我正在尝试将empRegionList 合并为Emp,其中Emp 的列表具有相同的id、firstName、lastName,然后合并empRegionList,最终结果将是Emp 有 EmpRegions 的列表,我得到了结果,但是有没有更好的方法来使用 Lambdas 来实现这一点。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Emp{
private String id;
private String firstName;
private String lastName;
private List<EmpRegion> empRegionList;
public Emp(String id, String firstName, String lastName, List<EmpRegion> empRegionList) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.empRegionList = empRegionList;
}
//get-set-equal-hashcode-toString methods
}
class EmpRegion{
private String role;
private String region;
public EmpRegion(String role, String region) {
this.role = role;
this.region = region;
}
//get-set-equal-hashcode-toString methods
}
public class Test {
public static void main(String[] args) {
List<String> regions = Arrays.asList("USA", "UK", "INDIA","CHINA");
Test t=new Test();
Emp emp= t.getEmpWithMergedEmpRole("001",regions);
System.out.println(emp);
}
private Emp getEmpWithMergedEmpRole(String id, List<String> regions){
List<Emp> empList=new ArrayList<>();
for(String region: regions){
empList.add(getEmp(id,region));
}
List<EmpRegion> empRegionList= empList.stream().map(e -> e.getEmpRegionList()).flatMap(List::stream).collect(Collectors.toList());
empList.get(0).setEmpRegionList(empRegionList);
return empList.get(0);
}
private Emp getEmp(String id, String region) {
return new Emp(id,"Abc","Def", Arrays.asList(new EmpRegion("RL-"+region, region)));
}
}
【问题讨论】:
-
实际上您的代码并没有按照您在问题中描述的那样做。根据我的假设,您希望根据
(id, firstName, lastName)对Emp进行分组。您的代码中缺少此分组...我已尝试使用输出来answer您的问题。可能这就是你要找的…… -
谢谢 Mushif,你的回答很有帮助
-
很高兴它对您有所帮助。
标签: java list lambda collections java-stream