给我一个方法 可以将两个对象类型的List,根据对象中的某一个字段做匹配
时间: 2024-05-15 18:14:35 浏览: 172
可以使用 Java 8 中的 Stream API 和 lambda 表达式来实现,具体代码如下:
```
public static <T, U> List<Pair<T, U>> matchLists(List<T> list1, List<U> list2, Function<T, ?> keyExtractor1, Function<U, ?> keyExtractor2) {
Map<?, List<?>> map = list2.stream().collect(Collectors.groupingBy(keyExtractor2));
return list1.stream()
.flatMap(item1 -> map.getOrDefault(keyExtractor1.apply(item1), Collections.emptyList())
.stream().map(item2 -> new Pair<>(item1, item2)))
.collect(Collectors.toList());
}
```
这个方法接受两个 List,以及两个用于提取比较字段的函数 keyExtractor1 和 keyExtractor2。它会将第二个 List 转换为一个以比较字段值为 key,对应 List 为 value 的 Map,并遍历第一个 List,将每个元素在这个 Map 中查找对应的元素集合,然后将它们配对组成一个 Pair,最后返回所有 Pair 的 List。这个方法可以处理两个 List 中元素类型不同的情况,只需要提供不同的 keyExtractor 即可。
阅读全文