Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中,如何按日期对数组项进行分组?_Java_Arrays_Json - Fatal编程技术网

Java 在Android中,如何按日期对数组项进行分组?

Java 在Android中,如何按日期对数组项进行分组?,java,arrays,json,Java,Arrays,Json,对象的数组 Statement:[ { "date": "12-09-19 11:02:47", "Country": "Bangladesh", "Profession": "X", "Salary": "100", }, { "date": "12-09-19 11:02:47", "Country": "Bangladesh", "Profe

对象的
数组


    Statement:[
       {
       "date": "12-09-19 11:02:47",
       "Country": "Bangladesh",
       "Profession": "X",
       "Salary": "100",
       },
       {
       "date": "12-09-19 11:02:47",
       "Country": "Bangladesh",
       "Profession": "Y",
       "Salary": "101",
       },
       {
       "date": "12-09-19 11:02:47",
       "Country": "Bangladesh",
       "Profession": "Z",
       "Salary": "102",
       },
       {
       "date": "11-09-19 11:02:47",
       "Country": "India",
       "Profession": "I",
       "Salary": "103",
       },
       {
       "date": "11-09-19 11:02:47",
       "Country": "India",
       "Profession": "J",
       "Salary": "104",
       },
       {
       "date": "10-09-19 11:02:47",
       "Country": "Nepal",
       "Profession": "N",
       "Salary": "105",
       },
       {
       "date": "10-09-19 11:02:47",
       "Country": "Nepal",
       "Profession": "M",
       "Salary": "106",
       }
       ]
我正在尝试创建一个新的
数组
,该数组将创建一个
对象
,每个日期(作为键)和同一
对象中的其他信息

新阵列应如下所示:

    "10-09-19": [
    {
      "Country": "Nepal",
      "Profession": "M",
      "Salary": "106",
    },
    {
      "Country": "Nepal",
      "Profession": "N",
      "Salary": "105",
    }
    ],
    "11-09-19": [{
      "Country": "India",
      "Profession": "J",
       "Salary": "104",
    },
    {
      "Country": "India",
      "Profession": "I",
      "Salary": "103",
    }
    ],
    "12-09-19": [{
      "Country": "Bangladesh",
      "Profession": "x",
       "Salary": "104",
    },
    {
      "Country": "Bangladesh",
      "Profession": "y",
      "Salary": "103",
    },
    {
      "Country": "Bangladesh",
      "Profession": "z",
      "Salary": "102",
    }
    ]




您可以分组使用Java8。希望下面的代码能帮助你

Map<String, List<Pojo>> groupedList = 
list.stream().collect(Collectors.groupingBy(Pojo::getDate, Collectors.toList()));
Map groupedList=
list.stream().collect(Collectors.groupingBy(Pojo::getDate,Collectors.toList());

使用hashmap按日期存储数据。hashmap的键将是日期。 这是我的代码,它可能会帮助您理解逻辑

      var sortedList= HashMap<String, MutableList<Model>>() // create hashmap to store data
        var temp: MutableList<Model>? = ArrayList<Model>()
        for (item in currentList!!) {
            temp = sortedList?.get(item.date.split(" ").get(0)) // get date and remove timing

            if (temp != null)     //if this is not null it mean this contain items
                temp.add(item)
            else {
                temp = ArrayList<Model>()  //if this is null it means this is new data or new data
                temp.add(item)
            }

            sortedList?.put(item.date.split(" ").get(0), temp)
    }
var sortedList=HashMap()//创建HashMap来存储数据
变量温度:可变列表?=ArrayList()
用于(当前列表中的项目!!){
temp=sortedList?.get(item.date.split(“”.get(0))//获取日期并删除计时
if(temp!=null)//如果该值不为null,则表示该值包含项
临时添加(项目)
否则{
temp=ArrayList()//如果为空,则表示这是新数据或新数据
临时添加(项目)
}
sortedList?put(项目日期拆分(“”)。get(0),temp)
}
我的密码是kotlin抱歉。
快乐编码。

首先循环数组以获取日期。 创建日期的JSONArray,如下所示

JSONArray jsonArray = new JSONArray("date");
//在添加所需对象的同时循环数组

for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObj = jsonArray.getJSONObject(i);
jsonObj.put("item1", value1);
jsonObj.put("item2", value2);


jsonArray.put(jsonObj);

} 

for(int i=0;i我假设您提供的都是JSON字符串(但它们看起来无效),那么您可以实现如下转换:

ObjectMapper mapper = new ObjectMapper();
ObjectNode root = (ObjectNode) mapper.readTree(jsonStr);
ObjectNode rootNew = mapper.createObjectNode();
for (int i = 0; i < root.get("Statement").size(); i++) {
    String date = root.get("Statement").get(i).get("date").asText().split(" ")[0];
    ObjectNode node = (ObjectNode) ((ObjectNode) root.get("Statement").get(i));
    node.remove("date");
    if (rootNew.has(date)) {
        ((ArrayNode) rootNew.get(date)).add(node);
    } else {
        rootNew.put(date, mapper.createArrayNode().add(node));
    }
}
System.out.println(rootNew.toString());

首先感谢你们回答我的问题。我有一个解决方案,我想我应该和你们分享

JSONArray statementArray = response.getJSONArray("statement");

Map<String, List<String>> map= new HashMap<String, List<String>>();
for(int i = 0; i < statementArray.length(); i ++) {

   JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);
   String date= mJsonObjectStatement.getString("date").split(" ")[0];
   List<String> valSet = new ArrayList<String>();
   valSet.add(0,mJsonObjectStatement.getString("Country"));
   valSet.add(1,mJsonObjectStatement.getString("Profession"));
   valSet.add(2,mJsonObjectStatement.getString("Salary"));
   map.put(date,valSet);
}
for (Map.Entry<String, List<String>> entry : transactionReportMap.entrySet()) {
   String key = entry.getKey();
   List<String> values = entry.getValue();
   Log.e("Key = " , key);
   Log.e("Values = " , values + "n");
}
Log.e("Result:",map.toString());
JSONArray语句数组=response.getJSONArray(“语句”);
Map Map=newhashmap();
对于(int i=0;i
上述解决方案不能提供相同的结果,但它符合我的目的

我找到了另一个解决办法

JSONArray statementArray = response.getJSONArray("statement");

ObjectMapper mapper = new ObjectMapper();
Map<String, List<String>> map= new HashMap<String, List<String>>();
for(int i = 0; i < statementArray.length(); i ++) {
   JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);
   String date= mJsonObjectStatement.getString("date").split(" ")[0];
   if (transactionReportMap.containsKey(date)) {
       map.get(date).add(date);
   } else {
       ArrayList<String> infoList = new ArrayList<String>();
       infoList.add(mJsonObjectStatement.getString("Country"));
       infoList.add(mJsonObjectStatement.getString("Profession"));
       infoList.add(mJsonObjectStatement.getString("Salary"));
       map.put(date, infoList);
   }
}
StringWriter result = new StringWriter();
try {
  mapper.writeValue(result, map);
} catch (IOException e) {
  e.printStackTrace();
}
Log.e("Result: ",result+"");
JSONArray语句数组=response.getJSONArray(“语句”);
ObjectMapper mapper=新的ObjectMapper();
Map Map=newhashmap();
对于(int i=0;i
你的旧JSON字符串无效。对不起,我的错误。我想你得到了我想要的。兄弟,你能帮我做一些类似[{“日期”:“12-09-19”,“信息”:[{“国家”:“孟加拉国”,“专业”:“x”,“薪水”:“104”},{“国家”:“孟加拉国”,“专业”:“专业”:“y”,“薪水”:“104”},{“国家”:“孟加拉国”,“专业”:“z”,“薪水”:“104”{“日期”:“11-09-19”,“信息”:[{“国家”:“尼泊尔”,“职业”:“M”,“薪金”:“104”},{“国家”:“尼泊尔”,“职业”:“N”,“薪金”:“104”}]}]@Saymum Sany我想这将是另一个问题,因为它的解决方案会有所不同。好的,兄弟,我将发布另一个问题。你能帮我从这个解决方案中获取节点值吗?我如何获得带有节点日期的12-09-19、10-09-19和11-09-19数组?
JSONArray statementArray = response.getJSONArray("statement");

ObjectMapper mapper = new ObjectMapper();
Map<String, List<String>> map= new HashMap<String, List<String>>();
for(int i = 0; i < statementArray.length(); i ++) {
   JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);
   String date= mJsonObjectStatement.getString("date").split(" ")[0];
   if (transactionReportMap.containsKey(date)) {
       map.get(date).add(date);
   } else {
       ArrayList<String> infoList = new ArrayList<String>();
       infoList.add(mJsonObjectStatement.getString("Country"));
       infoList.add(mJsonObjectStatement.getString("Profession"));
       infoList.add(mJsonObjectStatement.getString("Salary"));
       map.put(date, infoList);
   }
}
StringWriter result = new StringWriter();
try {
  mapper.writeValue(result, map);
} catch (IOException e) {
  e.printStackTrace();
}
Log.e("Result: ",result+"");