![](/img/trans.png)
[英]Grouping array elements of same value in each line while printing - 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.