[英]how to sort an ArrayList in ascending order using Collections and Comparator
如何使用Comparator
按升序對ArrayList
進行排序? 我知道如何使用以下降順序對其進行排序:
Comparator mycomparator = Collections.reverseOrder();
然后
Collections.sort(myarrayList,mycomparator);
只是想知道如何使用集合和比較器按升序對其進行排序? 謝謝!
把它扔到那里......你不能這樣做:
Collections.sort(myarrayList);
雖然已經有一段時間了......
使用默認版本:
Collections.sort(myarrayList);
當然,這要求您的Elements實現Comparable
,但對於您提到的版本也是如此。
順便說一句:您應該在代碼中使用泛型,這樣如果您的類沒有實現Comparable,就會遇到編譯時錯誤。 編譯時錯誤比運行時錯誤要好得多。
List<MyClass> list = new ArrayList<MyClass>();
// now fill up the list
// compile error here unless MyClass implements Comparable
Collections.sort(list);
按值排序
public Map sortByValue(Map map, final boolean ascending) {
Map result = new LinkedHashMap();
try {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
@Override
public int compare(Object object1, Object object2) {
if (ascending)
return ((Comparable) ((Map.Entry) (object1)).getValue())
.compareTo(((Map.Entry) (object2)).getValue());
else
return ((Comparable) ((Map.Entry) (object2)).getValue())
.compareTo(((Map.Entry) (object1)).getValue());
}
});
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
result.put(entry.getKey(), entry.getValue());
}
} catch (Exception e) {
Log.e("Error", e.getMessage());
}
return result;
}
這可能有用嗎?
Comparator mycomparator =
Collections.reverseOrder(Collections.reverseOrder());
完成此任務的兩種方法:
Collections.sort(myArray)
myArray中的給定元素實現了Comparable
第二
Collections.sort(myArray, new MyArrayElementComparator());
其中MyArrayElementComparator
是myArray中元素的Comparator
這是一個完整的例子:
假設我們有一個Person類,如:
public class Person
{
protected String fname;
protected String lname;
public Person()
{
}
public Person(String fname, String lname)
{
this.fname = fname;
this.lname = lname;
}
public boolean equals(Object objet)
{
if(objet instanceof Person)
{
Person p = (Person) objet;
return (p.getFname().equals(this.fname)) && p.getLname().equals(this.lname));
}
else return super.equals(objet);
}
@Override
public String toString()
{
return "Person(fname : " + getFname + ", lname : " + getLname + ")";
}
/** Getters and Setters **/
}
現在我們創建一個比較器:
import java.util.Comparator;
public class ComparePerson implements Comparator<Person>
{
@Override
public int compare(Person p1, Person p2)
{
if(p1.getFname().equalsIgnoreCase(p2.getFname()))
{
return p1.getLname().compareTo(p2.getLname());
}
return p1.getFname().compareTo(p2.getFname());
}
}
最后假設我們有一群人:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Group
{
protected List<Person> listPersons;
public Group()
{
this.listPersons = new ArrayList<Person>();
}
public Group(List<Person> listPersons)
{
this.listPersons = listPersons;
}
public void order(boolean asc)
{
Comparator<Person> comp = asc ? new ComparePerson() : Collections.reverseOrder(new ComparePerson());
Collections.sort(this.listPersons, comp);
}
public void display()
{
for(Person p : this.listPersons)
{
System.out.println(p);
}
}
/** Getters and Setters **/
}
現在我們試試這個:
import java.util.ArrayList;
import java.util.List;
public class App
{
public static void main(String[] args)
{
Group g = new Group();
List listPersons = new ArrayList<Person>();
g.setListPersons(listPersons);
Person p;
p = new Person("A", "B");
listPersons.add(p);
p = new Person("C", "D");
listPersons.add(p);
/** you can add Person as many as you want **/
g.display();
g.order(true);
g.display();
g.order(false);
g.display();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.