我试图这样做:按照今天,本周,本月和今年对对象数组(日期类型)进行排序,我知道如何使用Comparator按降序或升序排序日期数组在今天的日期,本周,本月或今年,我不知道如何对数组进行排序。
private void sortTopicsByDate() {
Collections.sort(topics, new Comparator<Topic>() {
@Override
public int compare(Topic o1, Topic o2) {
return o1.getCreatedTime().compareTo(o2.getCreatedTime());
}
});
}
更新(使用今天创建的照片过滤列表)
private List<Topic> getFilteredTopics() {
List<Topic> filteredList = new ArrayList<>();
Date now = new Date(); // today date
Calendar cal = Calendar.getInstance();
Calendar getCal = Calendar.getInstance();
cal.setTime(now);
int nYear = cal.get(Calendar.YEAR);
int nMonth = cal.get(Calendar.MONTH);
int nDay = cal.get(Calendar.DAY_OF_MONTH);
if (topics != null) {
for (Topic topic : topics) {
getCal.setTime(topic.getCreatedTime());
int year = getCal.get(Calendar.YEAR);
int month = getCal.get(Calendar.MONTH);
int day = getCal.get(Calendar.DAY_OF_MONTH);
if (nDay == day && month == nMonth) {
filteredList.add(topic);
}
}
}
return filteredList;
}
答案 0 :(得分:2)
使用java 8,您可以使用streaming-api
按日期过滤主题。
请注意,如果您需要修改start
中的条件,此解决方案不会在finish
中包含filter
和filter
。
Collection<Topic> topics = ...;
Date start = ...;
Date finish = ...;
List<Topic> filteredTopics = topics.stream()
.filter(t -> t.getCreatedTime().after(start) && t.getCreatedTime().before(finish))
.collect(Collectors.toList());
答案 1 :(得分:-2)
Date
已经实现了Comparable
接口,具有自然升序的日期顺序(即年份首先,然后是月份,然后是月份日期)。听起来你是在逆序(即今天,然后是昨天,然后是上周等)。如果是这种情况,你可以使用反向比较:
Comparator<Date> reverseComparator = new Comparator<Date>(){
@Override public int compare(Date d1, Date d2){
//dealing with nulls ignored for purposes of explanation
return -1*d1.compareTo(d2);
}
}
这应该先排序更近的日期。