我有一个double数组,我需要使用java流将其转换为JSONArray。我尝试使用forEach(共享可变性),这会导致数据丢失。
public static JSONArray arrayToJson(double[] array) throws JSONException{
JSONArray jsonArray = new JSONArray();
Arrays.stream(array)
.forEach(jsonArray::put);
return jsonArray;
}
有什么办法可以使用流创建JSONArray吗?
您的代码有效,但是您可以编写如下代码(jdk 8+
):
return Arrays.stream(array)
.collect(Collector.of(
JSONArray::new, //init accumulator
JSONArray::put, //processing each element
JSONArray::put //confluence 2 accumulators in parallel execution
));
另外一个示例(String
从创建一个List<String>
) :
List<String> list = ...
String str = list.stream()
.collect(Collector.of(
StringBuilder::new,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString //last action of the accumulator (optional)
));
看起来不错,但编译器抱怨:错误:方法引用.collect(Collector.of(JSONArray :: new,JSONArray ::
put,JSONArray :: put)中不兼容的抛出类型JSONException
我检查这个上jdk 13.0.1
和JSON 20190722
并没有发现除了问题Expected 3 arguments, but found 1
在.collect(...)
。
( 摇篮 :implementation group: 'org.json', name: 'json', version: '20190722'
)
解决 :
public static JSONArray arrayToJson(double[] array) throws JSONException {
return Arrays.stream(array).collect(
JSONArray::new,
JSONArray::put,
(ja1, ja2) -> {
for (final Object o : ja2) {
ja1.put(o);
}
}
);
}
注意
:JSONArray::put
合并器不能仅作为方法引用,因为这只会将一个数组放入另一个数组(例如[[]]
),而不是按照所需的行为实际组合它们。
我正在尝试创建一个简单的解析util,它转换一个两列CSV文件并将其放入一个映射。 如您所见,我正在创建一个字符串流,用逗号分隔每一行,并将其转换为字符串数组,最后将键映射到索引0,将值映射到索引1。 出于某种原因,当我运行这个测试时,实际值为null。我排除了无效的文件路径,因为它在另一个单元测试中运行良好,并且键值出现在CSV中。我已经盯着它看了几个小时了,我想也许有人能指出我的错误。 此外,
将Java 8转换为数组的最简单/最快捷的方法是什么?
问题内容: 我想用来将json对象流放入json数组中,例如,从 至 但这行不通 自从我得到 问题答案: 用该选项将其混为一谈。 作为另一种选择,使用读取值是更灵活的选择。通常,您需要将此选项与选项结合使用,以防止第一个值过早消耗。
更正:正如你们所指出的,我使用的是Java7。现在,方法就在那里。但问题仍然适用: 如何从字符串中获取?
作为练习,我将一些旧代码转换为函数流。我对溪流了解不多。看起来转换这段代码应该很简单,但我运气不太好。该方法从给定的整数开始,将其传递给isPrime,如果它是prime,isPrime将返回true。然后将要打印的新(下一个)素数交给用户。如果isPrime为false,则i递增,我们检查下一个整数。
问题内容: 如何自动将大小作为流的大小? 问题答案: 该被形成围绕其是迭代器的一种高级形式。这些可以报告某些特征,从而可以优化操作。他们还可能报告预期的元素数量,无论是估计的还是精确的。如果A事先知道元素数量,它将报告一个特征。 给定封装操作,您可以使用以下方法测试关于a元素的知识: 您可以使用它来学习某些操作如何影响有关元素的知识。例如,当您在以下测试程序中使用此方法时: 它将打印: 正如JB