当list<B>中由多个字段组成的keyList的值在list<A>中能找到一致的数据时,将匹配到的list<A>和list<B>出力。用java8写一段实现上述需求的共通方法
时间: 2024-06-12 12:04:45 浏览: 163
假设list<A>和list<B>都有一个共同的字段id,可以使用Java 8的Stream API和lambda表达式来实现上述需求:
```
public static <A, B> void matchAndOutput(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 (Object key : mapA.keySet()) {
if (mapB.containsKey(key)) {
List<A> matchedA = mapA.get(key);
List<B> matchedB = mapB.get(key);
// 输出匹配到的数据
System.out.println("Matched for key " + key + ":");
System.out.println("List A: " + matchedA);
System.out.println("List B: " + matchedB);
}
}
}
```
其中,keyA和keyB分别是从listA和listB的元素中提取keyList的函数,可以使用lambda表达式来实现。调用该方法时,只需要传入listA、listB和keyA、keyB即可。
示例代码:
```
List<A> listA = new ArrayList<>();
listA.add(new A(1, "A1"));
listA.add(new A(2, "A2"));
listA.add(new A(3, "A3"));
List<B> listB = new ArrayList<>();
listB.add(new B(1, "B1"));
listB.add(new B(2, "B2"));
listB.add(new B(2, "B3"));
matchAndOutput(listA, listB, A::getId, B::getId);
```
其中,A和B分别是listA和listB的元素类型,getId是从A和B中提取id的函数。输出结果:
```
Matched for key 1:
List A: [A{id=1, name='A1'}]
List B: [B{id=1, name='B1'}]
Matched for key 2:
List A: [A{id=2, name='A2'}]
List B: [B{id=2, name='B2'}, B{id=2, name='B3'}]
```
阅读全文