我有一个简单的类
public class ActiveAlarm {
public long timeStarted;
public long timeEnded;
private String name = "";
private String description = "";
private String event;
private boolean live = false;
}
和List<ActiveAlarm>
con。如何先按timeStarted
,再按timeEnded
进行升序排序?有人能帮上忙吗?我知道在C++中使用泛型算法和重载运算符<,但我还是个新手。
发布于 2018-04-02 14:10:43
在java8+中,这可以用一行代码编写,如下所示:
collectionObjec.sort(comparator_lamda)
或comparator.comparing(CollectionType::getterOfProperty)
代码:
ListOfActiveAlarmObj.sort((a,b->a.getTimeStarted().compareTo(b.getTimeStarted())))
或
ListOfActiveAlarmObj.sort(Comparator.comparing(ActiveAlarm::getTimeStarted))
发布于 2011-04-27 22:25:08
public class ActiveAlarm implements Comparable<ActiveAlarm> {
public long timeStarted;
public long timeEnded;
private String name = "";
private String description = "";
private String event;
private boolean live = false;
public int compareTo(ActiveAlarm a) {
if ( this.timeStarted > a.timeStarted )
return 1;
else if ( this.timeStarted < a.timeStarted )
return -1;
else {
if ( this.timeEnded > a.timeEnded )
return 1;
else
return -1;
}
}
这应该会让你有一个大致的想法。完成后,您可以调用列表中的Collections.sort()
。
发布于 2011-04-27 22:23:50
Collections.sort(list, new Comparator<ActiveAlarm>(){
@Override
public int compare(ActiveAlarm a1, ActiveAlarm a2) {
return ComparisonChain.start()
.compare(a1.timestarted, a2.timestarted)
//...
.compare(a1.timeEnded, a1.timeEnded).result();
}});
https://stackoverflow.com/questions/5805602
复制相似问题