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+"");