Java 8:有没有一种更有效的方法来过滤JSONArray?

时间:2019-09-16 12:47:44

标签: java java-8 java-stream

我想出了这段代码来过滤所有真实的对象,但是我可以使它更整洁吗?整数转换和布尔转换让我发痒...

import org.json.JSONArray;
import org.json.JSONObject;

JSONArray arr = new JSONArray();
arr.put(false);
arr.put(true);
arr.put(false);

//JSONArray is a list of objects
boolean b = IntStream.range(0, arr.length())
        .filter(index -> ((boolean) arr.get(index)) == true)
        .findAny()
        .isPresent();

我使用

<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>

依赖性。是最好的选择吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以将IntStreamgetBoolean结合使用:

JSONArray arr = new JSONArray();
arr.put(false);
arr.put(true);
arr.put(false);

//JSONArray is a list of objects
boolean b = IntStream.range(0, arr.length())
        .anyMatch(arr::getBoolean);

System.out.println(b);

输出

true

您可以使用以下替代方法:

boolean b = StreamSupport.stream(arr.spliterator(), false)
                .anyMatch(Boolean.TRUE::equals);

上述解决方案确实可以处理JSONException问题,例如,它为以下输入返回true

JSONArray arr = new JSONArray();
        arr.put(false);
        arr.put(1);
        arr.put(true);

答案 1 :(得分:1)

尝试一下:

boolean b = arr.toList().stream().anyMatch(x -> (Boolean) x);
相关问题