java8写一个通过复数个key对两个list进行match的共通方法
时间: 2024-04-29 09:22:44 浏览: 122
Java 程序将两个复数相加.docx
以下是一个通过复数个key对两个list进行match的Java 8方法:
```java
import java.util.*;
import java.util.stream.Collectors;
public class ListMatcher {
public static <T, K> Map<K, List<T>> matchLists(List<T> list1, List<T> list2, Function<T, K> keyExtractor) {
Map<K, List<T>> map1 = list1.stream().collect(Collectors.groupingBy(keyExtractor));
Map<K, List<T>> map2 = list2.stream().collect(Collectors.groupingBy(keyExtractor));
Set<K> keys = new HashSet<>(map1.keySet());
keys.addAll(map2.keySet());
Map<K, List<T>> result = new HashMap<>();
for (K key : keys) {
List<T> values1 = map1.getOrDefault(key, new ArrayList<>());
List<T> values2 = map2.getOrDefault(key, new ArrayList<>());
List<T> matchedValues = new ArrayList<>(values1);
matchedValues.retainAll(values2);
result.put(key, matchedValues);
}
return result;
}
}
```
该方法使用Java 8的Stream API和Lambda表达式。它接受两个列表和一个从对象到key的函数,它将每个列表转换为一个Map,其中key是对象的key,value是具有该key的对象的列表。然后,该方法使用一个HashSet来获取所有不同的key,然后迭代每个key并找到两个列表中具有该key的对象。最后,该方法返回一个Map,其中key是所有不同的key,value是两个列表中具有该key的对象的交集。
阅读全文