[英]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.