java8写一个找出listA中存在多条与listBkey有复数个key能match上的共通方法
时间: 2024-04-30 08:23:18 浏览: 101
JAVA JDK8 List分组获取第一个元素的方法
以下是一个示例代码:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Map<String, String>> listA = new ArrayList<>();
List<String> listB = new ArrayList<>();
listB.add("key1");
listB.add("key2");
Map<String, String> map1 = new HashMap<>();
map1.put("key1", "value1");
map1.put("key2", "value2");
map1.put("key3", "value3");
listA.add(map1);
Map<String, String> map2 = new HashMap<>();
map2.put("key1", "value1");
map2.put("key2", "value2");
map2.put("key4", "value4");
listA.add(map2);
List<Map<String, String>> result = findCommon(listA, listB, 2);
System.out.println(result);
}
public static List<Map<String, String>> findCommon(List<Map<String, String>> listA, List<String> listB, int count) {
List<Map<String, String>> result = new ArrayList<>();
// 遍历listA中的每个map
for (Map<String, String> mapA : listA) {
int matchCount = 0; // 记录与listB匹配的key数量
// 遍历listB中的每个key
for (String keyB : listB) {
if (mapA.containsKey(keyB)) { // 如果mapA中包含该key
matchCount++;
}
}
if (matchCount >= count) { // 如果匹配的key数量大于等于count
result.add(mapA); // 将该map加入结果列表
}
}
return result;
}
}
```
解释:
1. `listA`是包含多个`Map<String, String>`的列表,每个`Map`表示一个对象,其中包含多个key-value对。
2. `listB`是包含多个`String`的列表,表示要匹配的key的集合。
3. `findCommon`方法接收三个参数:`listA`、`listB`和`count`,其中`count`表示匹配的key数量必须大于等于它才能算作匹配成功。
4. 在`findCommon`方法中,首先创建一个空的`result`列表用于存储匹配成功的对象。
5. 然后遍历`listA`中的每个`Map`,对于每个`Map`,遍历`listB`中的每个key,如果该`Map`包含该key,就将`matchCount`加1。
6. 如果`matchCount`大于等于`count`,就将该`Map`加入`result`列表。
7. 最后返回`result`列表作为结果。
在示例代码中,`listA`中有两个对象,分别包含`key1`、`key2`、`key3`和`key1`、`key2`、`key4`这四个key的值。`listB`中包含`key1`和`key2`这两个key。调用`findCommon`方法时,将`count`设为2,即要求匹配的key数量必须大于等于2才算作匹配成功。运行结果如下:
```
[{key1=value1, key2=value2, key3=value3}, {key1=value1, key2=value2, key4=value4}]
```
可以看到,两个对象都满足匹配条件,因为它们都包含了`key1`和`key2`这两个key。
阅读全文