我目前正在学习一些关于流的知识。
我有以下 JSONArray,并且我希望能够检索所有不同的 xvalue。
datasets: {
ds1: {
xvalues: [
"(empty)",
"x1",
"x2"
]
},
ds2: {
xvalues: [
"(empty)",
"x1",
"x2",
"x3"
]
}
}
我正在尝试以下代码,但它似乎不太正确......
List<String> xvalues = arrayToStream(datasets)
.map(JSONObject.class::cast)
.map(dataset -> {
try {
return dataset.getJSONArray("xvalues");
} catch (JSONException ex) {
}
return;
})
.distinct()
.collect((Collectors.toList()));
private static Stream<Object> arrayToStream(JSONArray array) {
return StreamSupport.stream(array.spliterator(), false);
}
你得到什么.map(dataset -> dataset.getJSONArray("xvalues")
(try-catch
为了清楚起见,省略了块)是一个列表本身以及随后的调用distinct
用于Stream<List<Object>>
检查列表本身及其所有内容是否与另一个列表相同并留下不同的列表。
您需要将结构平面映射到Stream<Object>
然后使用distinct
获得独特的物品。但是,首先您需要转换JSONArray 列表 https://stackoverflow.com/questions/3395729/convert-json-array-to-normal-java-list.
List<String> xvalues = arrayToStream(datasets)
.map(JSONObject.class::cast)
.map(dataset -> dataset -> {
try { return dataset.getJSONArray("xvalues"); }
catch (JSONException ex) {}
return;})
.map(jsonArray -> toJsonArray(jsonArray )) // convert it to List
.flatMap(List::stream) // to Stream<Object>
.distinct()
.collect(Collectors.toList());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)