说我有一个JSON对象的JSON数组(在JSON对象内部)。

{
  data:
    [
      {id:45, building:1, lane: 6},
      {id:58, building:1, lane: 9},
      {id:46, building:2, lane: 4},
      {id:51, building:2, lane: 9},
      {id:40, building:3, lane: 2},
      {id:39, building:4, lane: 3}
  ]
}


我想循环遍历该数组并将每个JSON对象添加到新的JSON数组,但是仅当某个键(building)的值之一尚未添加到新的JSON数组中时。

例如,如果我遍历JSON数组并转到id:45,则想将该对象添加到新的JSON数组中,但是前提是还没有一个键值对为building:1的对象。由于它将是第一个对象,因此它将被添加到新数组中。

假设我要遍历的第二个对象是id:58。由于我的新JSON数组已经具有一个带有building:1的对象,因此我不想将该对象添加到我的新数组中。

我将如何去做呢?

最佳答案

我自己没有对此进行测试,但是应该可以。

    JSONArray arr = //your data object
    JSONArray newArr = new JSONArray();
    arr.stream().forEach(el -> {
        Integer val = (Integer) ((JSONObject) el).get("building");
        if (((List<Integer>) newArr.parallelStream().map(obj -> (Integer) ((JSONObject) obj).get("building"))
                .filter(obj -> obj == val).collect(Collectors.toList())).isEmpty()) {
            newArr.add(el);
        }
    });

10-05 21:09