具有优先级ID和日期时间的排序列表模型 [英] Sort list model with priority id's and date time
本文介绍了具有优先级ID和日期时间的排序列表模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
样品清单
ArrayList<MyObject> list = new ArrayList<MyObject>();
list.add(new MyObject (1, "2011-04-27T09:40:01.607"));
list.add(new MyObject (1, "2011-05-27T09:42:01.607"));
list.add(new MyObject (2, "2011-06-27T09:42:01.607"));
list.add(new MyObject (5, "2011-07-27T09:43:01.607"));
list.add(new MyObject (6, "2011-08-27T09:44:01.607"));
list.add(new MyObject (6, "2011-09-27T09:45:01.607"));
list.add(new MyObject (1, "2011-10-27T09:46:01.607"));
1:-如何根据ID对ArrayList进行排序
1:-How to Sort ArrayList with the respect of Id's
必需的输出
list.get(0)= (1, "2011-04-27T09:40:01.607"));
list.get(1)=(1, "2011-05-27T09:42:01.607"));
list.get(2)= (1, "2011-10-27T09:46:01.607"));
list.get(3)=(2, "2011-06-27T09:42:01.607"));
list.get(4)=(5, "2011-07-27T09:43:01.607"));
list.get(5)=(6, "2011-08-27T09:44:01.607"));
list.get(6)=(6, "2011-09-27T09:45:01.607"));
2:-对ID进行排序时,然后根据ID的日期对每组ID进行排序
2:-When id's are sorted then every group of id's sort according according to its date
意味着ID(1)存在3次,因此ID(1)根据其日期排序
Means id (1) exist 3 time so id (1) sort according to its date
必填输出
list.get(0)= (1, "2011-10-27T09:46:01.607"));
list.get(1)=(1, "2011-05-27T09:46:01.607"));
list.get(2)= (1, "2011-04-27T09:46:01.607"));
list.get(3)=(2, "2011-06-27T09:46:01.607"));
list.get(4)=(5, "2011-07-27T09:46:01.607"));
list.get(5)=(6, "2011-08-27T09:46:01.607"));
list.get(6)=(6, "2011-09-27T09:46:01.607"));
推荐答案
您可以有2个比较器,如下所示
You can have 2 comparators like following
IdSorter.java
public class IdSorter implements Comparator<MyObject>
{
public int compare(MyObject o1, MyObject o2)
{
return o1.getId() - o2.getId();
}
}
DateSorter.java
public class DateSorter implements Comparator<MyObject>
{
public int compare(MyObject o1, MyObject o2)
{
return o1.getTime().compareTo(o2.getTime());
}
}
然后您可以按照以下顺序进行排序
Then you can sort like following
Java 8
Collections.sort(list, new IdSorter()
.thenComparing(new DateSorter()));
Java 8以下
MyObjectChainedComparator.java
public class MyObjectChainedComparator implements Comparator<MyObject> {
private List<Comparator<MyObject>> listComparators;
@SafeVarargs
public MyObjectChainedComparator(Comparator<MyObject>... comparators) {
this.listComparators = Arrays.asList(comparators);
}
@Override
public int compare(MyObject o1, MyObject o2) {
for (Comparator<MyObject> comparator : listComparators) {
int result = comparator.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
}
}
像下面一样使用类MyObjectChainedComparator.java
Collections.sort(list, new MyObjectChainedComparator(
new IdSorter(),
new DateSorter()));
您的结果将如下所示
Id 1 Time 2011-04-27T09:40:01.607
Id 1 Time 2011-05-27T09:42:01.607
Id 1 Time 2011-10-27T09:46:01.605
Id 2 Time 2011- 06-27T09:42:01.607
Id 5 Time 2011-07-27T09:43:01.607
Id 6 Time 2011-08-27T09:44:01.607
Id 6 Time 2011-09-27T09:45:01.607
这篇关于具有优先级ID和日期时间的排序列表模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文