Java - 公共数组元素的分组

问题描述 投票:2回答:2

我试图将所有常见的数组元素分组。例如

array = [{ 'LA',1},
         { 'LA',1},
         { 'NY',2},
         { 'NY',3},
         { 'LA',1}]

在这个数组中,我试图将一个组中的所有ONE元素和另一个组中的TWO元素组合在一起,并且也是。

请找到我在javascript中创建的以下代码但是,如何使用java创建相同的功能

Javascript: - (能够正确分组)

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
java json
2个回答
0
投票

我想你想要的是这个

Map<String, List<JSONObject>> map = IntStream.range(0, lineItemArray.size())
    .mapToObj(lineItemArray::getJSONObject)
    .groupingBy(item -> item.getString("number"));

这个例子给你一个Map包含

["1" = [{"1", "LA"}, {"1", "LA"}, {"1", "LA"}],
 "2" = [{"2", "NY"}],
 "3" = [{"3", "NY"}]]

(这既不是有效的JSON也不是实际的Map#toString输出,但我想它很清楚是什么意思)。


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")));
© www.soinside.com 2019 - 2024. All rights reserved.