首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java 8流在JSON对象上迭代给定的键列表

使用Java 8流在JSON对象上迭代给定的键列表
EN

Stack Overflow用户
提问于 2022-08-25 11:14:13
回答 2查看 81关注 0票数 -1

我有钥匙清单

代码语言:javascript
复制
List<String> traverses = Arrays.asList("json1", "json2", "json3", "json4", "json5");

下面是JSONObject

代码语言:javascript
复制
{
  "json1": {
    "json2": {
      "json3": {
        "json4": {
          "json5": {
            "data": [
              {
                "key": "9941",
                "doc_count": 14
              },
              {
                "key": "9920",
                "doc_count": 11
              },
              {
                "key": "9933",
                "doc_count": 11
              },
              {
                "key": "9931",
                "doc_count": 6
              },
              {
                "key": "9932",
                "doc_count": 4
              }
            ]
          }
        }
      }
    }
  }
}

我想使用Lambda在JSONObject上面迭代给定的json键(遍历)。

我是用传统的方式实现的。

代码语言:javascript
复制
JSONObjet jsonObject = getJSONObject();
for (String key : traverses) {
    jsonObject = jsonObject.optJSONObject(key);
}

但是寻找高级方法(使用Stream/Lambda)来实现同样的目标。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-25 11:54:46

这相当于您的循环:

代码语言:javascript
复制
JSONObjet jsonObject = traverses.stream().reduce(
        getJSONObject(),
        JSONObject::optJSONObject,
        (c1, c2) -> null);

它使用的是reduce方法,不幸的是它需要一个没有多大意义的组合器参数。幸运的是,在这种情况下,它实际上并没有调用它,所以我只是让它返回null。

票数 1
EN

Stack Overflow用户

发布于 2022-08-25 11:21:02

traverses.stream().forEach((key)-> {jsonObject = jsonObject.optJSONObject(key); })

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73486498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档