我必须对数组元素进行分组(基于公共数字),并为每个组创建一个单独的数组。例如
Array structure = [{Location, Date, Number}]
array = [{ 'LA','2017-12-01',1},
{ 'LA','2017-12-01',1},
{ 'NY','2017-12-01',2},
{ 'NY','2016-10-01',3},
{ 'LA','2017-12-01',1},
{ 'LA','2017-12-01',1},
{ 'LA','2017-12-01',1}]`
在上面的数组中我有6个ONES,1个TWO和1个THREE。所以,我总共有3组,我必须为每组创建3个阵列。问题是无法创建 每个组的单独数组,并且它没有正确循环。
请找到我正在尝试的以下代码。
List al=new ArrayList();
for(int i=0;i<lineItemsArray.length();i++)
{
JSONObject lineObj1 = lineArr.getJSONObject(i);
for(int j=0;j<lineItemsArray.length();j++)
{
JSONObject lineObj2 = lineArr.getJSONObject(j);
if(lineObj1.getString("number")
.equalsIgnoreCase(lineObj2.getString("number")))
{
al.add(lineObj2.getString("number"));
}
}
}
答案 0 :(得分:1)
您应该使用Arrays.stream
将数组转换为流并将其分组:
Map<Object, List<JSONObject>> numberMap = Arrays.stream(lineItemsArray).collect(Collectors.groupingBy(item -> item.get("number")));
答案 1 :(得分:-1)
最后,我得到了对常见JSONArray元素进行分组的方法。
Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
.mapToObj(index -> (JSONObject) lineItemsArray.get(index))
.collect(Collectors.groupingBy(item -> item.get("number")));