通用数组元素的Java分组。

时间:2022-09-27 21:22:28

Am trying to group all the common array elements. For example

正在尝试对所有公共数组元素进行分组。例如

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

From this Array , am trying to group all the ONE element in one group and TWO element in another group and THREE also.

从这个数组中,我尝试将一个组中的所有元素和另一个组中的两个元素以及三个元素进行分组。

Please find the below code that that i made in javascript but, how can i make the same functionality using java

请找到下面我用javascript编写的代码,但是,如何使用java实现相同的功能呢

Java Script: - ( Am able to grouping it properly )

Java脚本:-(能够正确分组)

Arrays.forEach(function (a) {
    grouped[a.number] = grouped[a.number] || [];
    grouped[a.number].push(a);
    });

Java :- ( but its not looping properly )

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"));
    }
    }
                }

For the mentioned Array, am expecting results like :

对于上述数组,我希望得到如下结果:

    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

But am getting results like : ( which is not correct )

但是我得到的结果是:(这是不正确的)

    Number from OuterLoop --->1:::from InnerLoop --->1
    Number from OuterLoop --->1:::from InnerLoop --->1
    Number from OuterLoop --->1:::from InnerLoop --->1

2 个解决方案

#1


0  

I think what you want is this

我想你想要的是这个

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

which for your example gives you a Map containing

在您的示例中,哪个给出了包含的映射

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

(which is neither valid JSON nor actual Map#toString output, but I guess it's clear what is meant).

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

#2


0  

Finally, i got the way to group common JSONArray elements.

最后,我找到了分组通用JSONArray元素的方法。

Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
                .mapToObj(index -> (JSONObject) lineItemsArray.get(index))
                .collect(Collectors.groupingBy(item -> item.get("number")));

#1


0  

I think what you want is this

我想你想要的是这个

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

which for your example gives you a Map containing

在您的示例中,哪个给出了包含的映射

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

(which is neither valid JSON nor actual Map#toString output, but I guess it's clear what is meant).

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

#2


0  

Finally, i got the way to group common JSONArray elements.

最后,我找到了分组通用JSONArray元素的方法。

Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
                .mapToObj(index -> (JSONObject) lineItemsArray.get(index))
                .collect(Collectors.groupingBy(item -> item.get("number")));