我试图对所有常见的数组元素进行分组。例如
array = [{ 'LA',1},
{ 'LA',1},
{ 'NY',2},
{ 'NY',3},
{ 'LA',1}]
从这个数组中,我试图将一个组中的所有ONE元素和另一个组中的TWO元素组合在一起,并且三个也是。
请找到我在javascript中制作的以下代码,但是,我如何使用java制作相同的功能
Java脚本: - (能够正确分组)
Arrays.forEach(function (a) {
grouped[a.number] = grouped[a.number] || [];
grouped[a.number].push(a);
});
Java: - (但它没有正确循环)
for(int i=0;i<lineItemsArray1.length();i++)
{
JSONObject lineObj1 = lineItemsArray1.getJSONObject(i);
for(int j=i+1;j<lineItemsArray2.length();j++)
{
JSONObject lineObj2 = lineItemsArray2.getJSONObject(j);
if(lineObj1.getString("number").
equalsIgnoreCase(lineObj2.getString("number")))
{
System.out.println("Number from OuterLoop ---
>"+lineObj1.getString("number")+":::from InnerLoop ---
>"+lineObj2.getString("number"));
//int numbers=Integer.parseInt(lineObj1.getString("number"));
}
}
}
对于上面提到的数组,我期待的结果如下:
Number from OuterLoop --->1:::from InnerLoop --->1
Number from OuterLoop --->1:::from InnerLoop --->1
Number from OuterLoop --->1:::from InnerLoop --->1
Number from OuterLoop --->2:::from InnerLoop --->2
Number from OuterLoop --->3:::from InnerLoop --->3
但我得到的结果如下:(这是不正确的)
Number from OuterLoop --->1:::from InnerLoop --->1
Number from OuterLoop --->1:::from InnerLoop --->1
Number from OuterLoop --->1:::from InnerLoop --->1
答案 0 :(得分:0)
我认为你想要的是这个
Map<String, List<JSONObject>> map = IntStream.range(0, lineItemArray.size())
.mapToObj(lineItemArray::getJSONObject)
.groupingBy(item -> item.getString("number"));
为您的示例提供了包含<{p}}的Map
["1" = [{"1", "LA"}, {"1", "LA"}, {"1", "LA"}],
"2" = [{"2", "NY"}],
"3" = [{"3", "NY"}]]
(既不是有效的JSON也不是实际的Map#toString
输出,但我想很明显是什么意思。)
答案 1 :(得分:0)
最后,我得到了对常见JSONArray元素进行分组的方法。
Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
.mapToObj(index -> (JSONObject) lineItemsArray.get(index))
.collect(Collectors.groupingBy(item -> item.get("number")));