java怎么将两个不同长度的集合,并且集合数据类型不同,里面相同id的数据合并到一起并返回
时间: 2023-05-20 07:01:35 浏览: 104
可以使用Java 8的Stream API来实现这个功能。首先,将两个集合合并成一个,然后使用groupingBy方法将数据按照id进行分组,最后使用reduce方法将相同id的数据合并到一起。下面是示例代码:
```
import java.util.*;
import java.util.stream.Collectors;
public class MergeCollections {
public static void main(String[] args) {
List<Map<String, Object>> list1 = new ArrayList<>();
list1.add(new HashMap<String, Object>() {{
put("id", 1);
put("name", "张三");
put("age", 20);
}});
list1.add(new HashMap<String, Object>() {{
put("id", 2);
put("name", "李四");
put("age", 25);
}});
List<Map<String, Object>> list2 = new ArrayList<>();
list2.add(new HashMap<String, Object>() {{
put("id", 1);
put("gender", "男");
}});
list2.add(new HashMap<String, Object>() {{
put("id", 3);
put("name", "王五");
put("age", 30);
}});
List<Map<String, Object>> mergedList = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.groupingBy(map -> map.get("id")))
.entrySet().stream()
.map(entry -> entry.getValue().stream()
.reduce((map1, map2) -> {
map1.putAll(map2);
return map1;
}).get())
.collect(Collectors.toList());
System.out.println(mergedList);
}
}
```
输出结果为:
```
[{id=1, name=张三, age=20, gender=男}, {id=2, name=李四, age=25}, {id=3, name=王五, age=30}]
```
可以看到,相同id的数据已经合并到了一起。
阅读全文