我正在开发一个由以下内容组成的新闻应用程序:
标题,说明,时间,日期
日期格式为:12/7/2017
当我添加倍数新闻时,它们会在recyclerview上随机显示。
使用Comparator对象按日期排序arraylist的最佳方法是什么,所以当我添加新闻时,它必须显示在recyclerview top。
这是我的工作代码:
JSONArray array = new JSONArray(response);
JSONObject jsonObject = null;
post_array2.clear();
Simplenews_data p;
for (int i = 0; i < array.length(); i++) {
jsonObject = array.getJSONObject(i);
int id_simplenews = jsonObject.getInt("id_simplenews");
String name_simplenews = jsonObject.getString("name_simplenews");
String image_simplenews = jsonObject.getString("image_simplenews");
String desc_simplenews = jsonObject.getString("desc_simplenews");
String time_simplenews = jsonObject.getString("time_simplenews");
String date_simplenews = jsonObject.getString("date_simplenews");
p = new Simplenews_data();
p.setId_simplenews(id_simplenews);
p.setName_simplenews(name_simplenews);
p.setImage_simplenews(image_simplenews);
p.setDesc_simplenews(desc_simplenews);
p.setTime_simplenews(time_simplenews);
p.setDate_simplenews(date_simplenews);
post_array2.add(p);
我已搜索并发现此代码适用于其他问题,如果你必须比较两个整数:
Collections.sort(post_array, new Comparator<Standings_data>(){
public int compare(Standings_data s1, Standings_data s2) {
return s1.getPts().compareToIgnoreCase(s2.getPts());
}
});
但实际上我不知道如何按照这种日期格式对其进行排序,所以当有新闻报道时,它不会随机显示在recyclerview的顶部。
这是当前情况的简单截图:
答案 0 :(得分:1)
通过拆分字符串来提取年,月和日:
String[] parts = date.split("/");
转换为整数然后比较年,月和日。
应该有效。
(如果您可以使用SimpleDateFormat解析,Vucko答案会更好)
答案 1 :(得分:1)
您可以将String
转换为Date
,就像Vucko建议的那样,或者您可以将日期转换为ISO 8601格式并按字母顺序对其进行排序。
ISO 8601看起来像YYYY-mm-dd所以按字母顺序排序这些字符串将按年,月和日排序,这有效地按时间顺序对字符串进行排序。
isodate = date.subString(5) + date.subString(0,2) + date.substring(3,4)
这将为您留下一个带有1或2个数字(7对17)的日期边缘情况,但这有望鼓励您使用更好的日期格式。您可以了解如何对ArrayList
Sorting a collection of objects