Filter Map<String,Object> by outer key 以及 usibg inner key using stream java 8

问题描述 投票:0回答:0

我想使用外部和内部键值过滤地图

我的地图如下

`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;

    }`

这只过滤外键,有人可以帮助过滤嵌套键吗

java java-8 stream hashmap
© www.soinside.com 2019 - 2024. All rights reserved.