java8写一个将两个list按照复数key进行match的共通方法
时间: 2024-05-06 11:20:53 浏览: 161
两个List集合取相同重复数据的方法
以下是一个示例代码,其中使用了Java 8中的Stream API来实现:
```java
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ListMatcher {
public static <T> Map<T, List<T>> matchLists(List<T> list1, List<T> list2, KeyExtractor<T> keyExtractor) {
Map<T, List<T>> resultMap = new HashMap<>();
Map<T, List<T>> list2Map = list2.stream()
.collect(Collectors.groupingBy(keyExtractor::extractKey));
for (T item : list1) {
T key = keyExtractor.extractKey(item);
List<T> matchingList = list2Map.getOrDefault(key, null);
if (matchingList != null) {
resultMap.put(item, matchingList);
}
}
return resultMap;
}
public interface KeyExtractor<T> {
T extractKey(T item);
}
}
```
该方法的输入参数包括两个List和一个KeyExtractor接口,KeyExtractor接口用于从列表中的每个元素中提取复数key。该方法使用Java 8的Stream API和Collectors.groupingBy方法来将第二个列表分组并放入一个Map中,然后使用一个for循环遍历第一个列表中的每个元素,并从第二个列表的Map中获取匹配项。如果找到匹配项,则将它们放入一个新的Map中并返回。
阅读全文