我在ArrayList上有一个排序; matchesList.sort(Comparator.comparing(比赛:: GETDATE).thenComparing(匹配::的getTime));
该值来自Firebase数据库,因此值以下列格式存储为字符串而不是日期(我不希望以长格式存储日期值); DD / MM / YYYY
上面的排序没有按预期工作,我在阅读其他帖子之后猜测这是因为比较器不知道字符串日期值实际意味着什么,所以不能按预期排序。
经过一些阅读和玩耍后,理想情况下我想转换定义我的ArrayList结构的类来支持Date类型但是在尝试这个时我得到一个错误,当循环时无法将字符串值转换为日期数据集并尝试填充ArrayList;
matches match = matchSnapshot.getValue(matches.class);
另一篇帖子再次谈到这是由于Firebase不支持日期类型,但我也尝试在日期类型变量上使用* .toString,但它仍然不喜欢这样。
我的问题是;有没有办法将日期格式dd / MM / yyyy存储为String,然后将其转换为可以添加到ArrayList的日期格式?
答案 0 :(得分:2)
我建议您将dd/MM/yyyy
格式String
转换为时间戳(长),然后排序时间戳(您可以使用Collections.sort()
)。有关时间戳的更多信息,请访问:Convert string Date into timestamp in Android?
然后,当您需要再次使用这些排序值时,只需将它们重新投射到目前为止。有关此内容的更多信息,请访问:Convert timestamp into string Date in Android?
<小时/> 希望它有所帮助。
答案 1 :(得分:2)
添加您自己的比较器并使用其他比较()方法。
matchesList.sort(Comparator.comparing(matches::getDate, myComparator).thenComparing(matches::getTime));
由于您使用的日期格式不能自然排序,因此无法正确执行此操作。我不知道标准库中可以使用的任何日期比较器,所以最好自己编写。
class DateComparator implements Comparator<String> {
@Override
public int compare(String date1, String date2) {
// TODO: compare your date strings
}
}