簡體   English   中英

Java-常見數組元素的分組

[英]Java - Grouping of common array elements

我正在嘗試對所有常見的數組元素進行分組。 例如

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

從這個Array中,我試圖將一個元素中的所有ONE元素歸為一組,將另一個元素中的兩個元素歸為一組,再將三個元素歸為一組。

請找到我用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

你想要的是

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輸出,但是我想很清楚這是什么意思)。

最后,我找到了對常見JSONArray元素進行分組的方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM