[英]How implement comparator in to sort objects in android or java
让我从以下示例开始:
public void loadList(ArrayList<Calls> list) {
List<Calls> calls = new ArrayList<Calls>();
calls.addAll(list);
}
其中Calls
是一个简单的类:
public class Calls {
public long ms;
public name;
}
我想基于ms
字段以升序或降序对上面的List<Calls>
进行排序。 我遇到了一些Comparator
示例,但仍不清楚。
我想这会有所帮助
public void loadList(ArrayList<Calls> list) {
List<Calls> calls = new ArrayList<Calls>();
calls.addAll( list );
// Ascending Order
Collections.sort(calls, new Comparator<Calls>() {
@Override
public int compare(Calls o1, Calls o2) {
return (int)(o1.ms-o2.ms);
}
});
// Descending Order
Collections.sort(calls, new Comparator<Calls>() {
@Override
public int compare(Calls o1, Calls o2) {
return (int)(o2.ms-o1.ms);
}
});
}
只需通过以下方式实现比较器:
private class CallsComparator implements Comparator<Calls> {
@Override
public int compare(Calls calls1, Calls calls2) {
//Swap calls1 with 2
return 1;
//Spap 2 with 1
return -1;
// do nothing
return 0;
}
}
当然,您必须使用if-condition替换我的评论:-)
并使用以下命令执行比较器:
Collections.sort(calls, new CallsComparator());
请参阅以下示例
class CallsComp implements Comparator<Calls>{
@Override
public int compare(Calls c1, Calls c2) {
if(c1.getMs() < c2.getMs()){
return 1;
} else {
return -1;
}
}
}
class MSComaparator implements Comparator<Calls>{
@Override
public int compare(Calls lhs, Calls rhs) {
// TODO Auto-generated method stub
return lhs.ms-rhs.ms;
}
}
class NameComaparator implements Comparator<Calls>{
@Override
public int compare(Calls lhs, Calls rhs) {
// TODO Auto-generated method stub
return lhs.name.comapreTo(rhs.name);
}
}
并致电:
public void loadList(ArrayList<Calls> list) {
List<Calls> calls = new ArrayList<Calls>();
calls.addAll(list);
Collections.sort(calls,new MSComaparator())
}
如果您只想基于ns进行排序,则可以简单地实现Comparable:
public class Calls implements Comparable<Calls>{
public long ms;
public name;
@Override
public int compareTo(Calls another) {
// TODO Auto-generated method stub
return this.ms>another.ms;
}
}
并致电:
public void loadList(ArrayList<Calls> list) {
List<Calls> calls = new ArrayList<Calls>();
calls.addAll(list);
Collections.sort(calls)
}
Calls
类需要实现Comparable
接口并实现compareTo
方法:
public class Calls implements Comparable<Calls> {
public long ms;
public name;
@Override
public int compareTo(Calls call) {
// Prepend a -1 for inverse order
return Long.compare(this.ms,call.ms);
}
}
然后,只需调用Collections.sort(calls)
对列表进行排序即可。
@ARP
我知道回答这个问题为时已晚,但是我最近在我的项目中实现了同样的事情,所以我想与你分享
所以在添加列表后在function
内部您可以做的是
public void loadList(ArrayList<Calls> list) {
List<Calls> calls = new ArrayList<Calls>();
calls.addAll(list);
Collections.sort(calls, new Comparator<Calls>() {
@Override
public int compare(Calls o, Calls t1) {
return (int) (o.getMS() - t1.getMS());
}
});
}
这将根据ms
存在的值为您排序ArrayList<Calls>
调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.