第1个回答 2021-05-22
使用jdk8新功能流stream,快速合并、筛选、去重,代码如下:
第一个类
public class Data1 {
private int id;
private String name;
private int amount;
public Data1(int id,String name,int amount){
this.id=id;
this.name=name;
this.amount=amount;
}
}
第二个类
public class Data2 {
private int id;
private String name;
private String type;
public Data2(int id,String name,String type){
this.id=id;
this.name=name;
this.type=type;
}
}
结果类
public class OutputData {
private int id;
private String name;
private List<String> types;
private int amount;
public OutputData(int id, String name, List<String> types, int amount){
this.id=id;
this.name=name;
this.amount=amount;
this.types=types;
}
}
关键代码
public class Test {
public static void main(String args[]){
List<Data2> listOfData2 = new ArrayList<Data2>();
listOfData2.add(new Data2(10501, "JOE" , "Type1"));
listOfData2.add(new Data2(10603, "SAL" , "Type5"));
listOfData2.add(new Data2(40514, "PETER", "Type4"));
listOfData2.add(new Data2(59562, "JIM" , "Type2"));
listOfData2.add(new Data2(29415, "BOB" , "Type1"));
listOfData2.add(new Data2(10501, "JOE" , "Type9"));
listOfData2.add(new Data2(10501, "JOE" , "Type7"));
listOfData2.add(new Data2(62556, "JEFF" , "Type1"));
listOfData2.add(new Data2(10599, "TOM" , "Type4"));
listOfData2.add(new Data2(29415, "BOB" , "Type3"));
List<Data1> listOfData1 = new ArrayList<Data1>();
listOfData1.add(new Data1(10501, "JOE" ,3000000));
listOfData1.add(new Data1(10603, "SAL" ,6225000));
listOfData1.add(new Data1(40514, "PETER" ,2005000));
listOfData1.add(new Data1(59562, "JIM" ,3000000));
listOfData1.add(new Data1(29415, "BOB" ,3000000));
listOfData1.add(new Data1(29416, "LUCY" ,3000000));
//此次是关键
List<OutputData> result2 = listOfData1.stream()
.map(x -> {
//提取某个字段,生成list,合并进新结果list
List<String> types = listOfData2.stream().filter(y -> y.getId() == x.getId()).map(Data2::getType).collect(Collectors.toList());
return new OutputData(x.getId(), x.getName(), types, x.getAmount());
})
.collect(Collectors.toList());
System.out.println(result2);
}
}