62,614
社区成员
发帖
与我相关
我的任务
分享
public class Sample {
public static void main(String[] args) {
try {
List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>() {{ //假设各个list的数据
add(new HashMap<String, Object>() {{
put("column11", 1);
put("column12", 2);
put("column13", 3);
}});
add(new HashMap<String, Object>() {{
put("column11", 1);
put("column12", 12);
put("column13", 13);
}});
add(new HashMap<String, Object>() {{
put("column11", 21);
put("column12", 22);
put("column13", 23);
}});
}};
List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>() {{
add(new HashMap<String, Object>() {{
put("column21", 1);
put("column22", 2);
put("column23", 3);
}});
add(new HashMap<String, Object>() {{
put("column21", 11);
put("column22", 1);
put("column23", 13);
}});
add(new HashMap<String, Object>() {{
put("column21", 21);
put("column22", 22);
put("column23", 23);
}});
}};
List<Map<String, Object>> list3 = new ArrayList<Map<String, Object>>() {{
add(new HashMap<String, Object>() {{
put("column31", 1);
put("column32", 2);
put("column34", 33);
}});
add(new HashMap<String, Object>() {{
put("column31", 11);
put("column32", 12);
put("column34", 33);
}});
add(new HashMap<String, Object>() {{
put("column31", 21);
put("column32", 22);
put("column34", 3);
}});
}};
//选出符合条件的list1
List<Map<String, Object>> result = list1.stream()
.filter( //是否存在list2的column2==list1.column1
m->
list2.stream()
.filter(
mm->mm.get("column22").equals(m.get("column11"))
)
.findAny()
.isPresent()
)
.filter(//是否存在list3的column4==list1.column3
m->
list3.stream()
.filter(
mm->mm.get("column34").equals(m.get("column13"))
)
.findAny()
.isPresent()
)
.collect(Collectors.toList());
//在选出符合条件的list1的基础上,把符合条件的list2,list3加入结果集
result.forEach(m->{
Map<String, Object> obj = list2.stream().filter(mm->mm.get("column22").equals(m.get("column11"))).findFirst().get();
for (Map.Entry<String, Object> o : obj.entrySet()) {
m.put(o.getKey(), o.getValue());
}
obj = list3.stream().filter(mm->mm.get("column34").equals(m.get("column13"))).findFirst().get();
for (Map.Entry<String, Object> o : obj.entrySet()) {
m.put(o.getKey(), o.getValue());
}
});
//打印结果
result.forEach(m->System.out.printf("%s\n", m));
} catch (Throwable e) {
e.printStackTrace();
}
}
}