Java 8 : Is there a batter way to filter JSONArray?

标签 java java-8 java-stream

我想出了这段代码来过滤所有真实的对象,但我可以让它更整洁吗? Instream 和 boolean 转换让我很痒......

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>

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

最佳答案

你可以使用 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);

关于Java 8 : Is there a batter way to filter JSONArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57957238/

相关文章:

java - JPanel 中的 JPanel 不听 KeyListener

java - 如何升级Java编译器?

JPA 左连接查询不会在 Spring Boot 中实例化子集合?

java - finalize() 在 Java 8 中调用强可达对象

Java 8 字符串比较

java - 将来自不同数组列表类的数据与不同实例合并

java - ListView onItemClickListener 不工作。单击不起作用

java - 如何使用 Locale 将三个数字解析为 LocalDate?

java - Java 8 中的 ArrayList 交叉匹配

java - 如何使用流合并 map 集合