我想使用外部和内部键值过滤地图
我的地图如下
`Map<String,Object> dataMap = new HashMap<>();
dataMap.put("account",account);
dataMap.put("productDetails",listOfProductDetails);
{
"account": "JV-013",
"productDetails": [
{
"productId": 1,
"productName": "birew",
"productVersion": [
"v1.0",
"v2.0"
],
"productOwner": [
{
"ownerName": "John",
"ownerMail": "[email protected]"
},
{
"ownerName": "Pav",
"ownerMail": "[email protected]"
}
]
},
{
"productId": 1,
"productName": "rowa",
"productVersion": [
"v1.0",
"v2.0"
],
"productOwner": [
{
"ownerName": "John",
"ownerMail": "[email protected]"
},
{
"ownerName": "Rias",
"ownerMail": "[email protected]"
}
]
}
]
}`
我想过滤“account”,它是外键,“productName”,“ownerName”是地图中项目列表的内键,如下所示,
`{
"account": "JV-013",
"productDetails": [
{
"productName": "birew",
"productOwner": [
{
"ownerName": "John"
},
{
"ownerName": "Pav"
}
]
},
{
"productName": "rowa",
"productOwner": [
{
"ownerName": "John"
},
{
"ownerName": "Rias"
}
]
}
]
}`
而且过滤键不是固定的,时不时会变
我试过下面的,
`public Map<String, Object> filterUsingMap(String filterKeys) throws IOException {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("account",account);
dataMap.put("productDetails",listOfProductDetails);
filterKeys = account,productDetails.productName,productDetails.productOwner.ownerName
//nestedkeys are using Dot to differentiate
List<String> str = Arrays.asList(filterKeys .split(","));
//filter map with fields
Map<String, Object> filteredMap1 = dataMap.entrySet()
.stream()
.filter(entry -> str.contains(entry.getKey()))
.collect(Collectors.toConcurrentMap(Map.Entry::getKey, Map.Entry::getValue));
return filteredMap1;
}`
这只过滤外键,有人可以帮助过滤嵌套键吗