当list<B>和list<A>以keyList进行匹配,且皮匹配到的件数比是N:M,将匹配成功的list<A>和list<B>出力。用java8写一段实现上述需求的共通方法
时间: 2024-06-12 20:04:44 浏览: 7
假设A和B都有一个名为key的属性,可以使用流操作和Lambda表达式实现上述需求:
```
public static <A, B> void matchListsByKey(List<A> listA, List<B> listB, Function<A, Object> keyA, Function<B, Object> keyB) {
Map<Object, List<A>> mapA = listA.stream().collect(Collectors.groupingBy(keyA));
Map<Object, List<B>> mapB = listB.stream().collect(Collectors.groupingBy(keyB));
for (Map.Entry<Object, List<A>> entryA : mapA.entrySet()) {
Object key = entryA.getKey();
List<A> listMatchedA = entryA.getValue();
List<B> listMatchedB = mapB.get(key);
if (listMatchedB != null) {
int sizeA = listMatchedA.size();
int sizeB = listMatchedB.size();
int sizeMatched = Math.min(sizeA, sizeB);
for (int i = 0; i < sizeMatched; i++) {
System.out.println(listMatchedA.get(i) + " matches " + listMatchedB.get(i));
}
}
}
}
```
这个方法接受两个列表和两个函数,分别用于从A和B对象中获取key属性的值。首先将两个列表分别按key属性分组,然后遍历A列表的每个key,获取匹配的A对象列表和B对象列表。如果B对象列表不为空,则取两个列表中对象数量较小的值作为匹配件数,然后输出匹配的A和B对象。注意这个方法没有返回值,只是输出匹配结果。可以根据具体情况自行修改。