Java 基于JSONArray中可用的公共编号对元素进行分组
我必须对数组元素进行分组(基于公共编号),并为每个组创建一个单独的数组。比如说Java 基于JSONArray中可用的公共编号对元素进行分组,java,json,Java,Json,我必须对数组元素进行分组(基于公共编号),并为每个组创建一个单独的数组。比如说 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},
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个1,1个2和1个3。所以,我总共有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"));
}
}
}
List al=new ArrayList();
对于(inti=0;i最后,我找到了将公共JSONArray元素分组的方法
Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
.mapToObj(index -> (JSONObject) lineItemsArray.get(index))
.collect(Collectors.groupingBy(item -> item.get("number")));
Map numberMap=IntStream.range(0,lineItemsArray.length())
.mapToObj(索引->(JSONObject)lineItemsArray.get(索引))
.collect(Collectors.groupby(item->item.get(“number”));
您应该使用数组.stream
将数组转换为流并将其分组:
Map<Object, List<JSONObject>> numberMap = Arrays.stream(lineItemsArray).collect(Collectors.groupingBy(item -> item.get("number")));
Map numberMap=Arrays.stream(lineItemsArray).collect(collector.groupby(item->item.get(“number”));
有关更简单的解决方案,请参见我的答案:您根本不需要为数组的索引操心。