我有一個arraylist,如何使用Comparator將其按升序排序?我知道如何給它的降序排序使用:如何使用集合和比較器以升序對Arraylist進行排序
Comparator mycomparator = Collections.reverseOrder();
然後
Collections.sort(myarrayList,mycomparator);
只是想知道如何將它使用類別和比較升序排序?謝謝!
我有一個arraylist,如何使用Comparator將其按升序排序?我知道如何給它的降序排序使用:如何使用集合和比較器以升序對Arraylist進行排序
Comparator mycomparator = Collections.reverseOrder();
然後
Collections.sort(myarrayList,mycomparator);
只是想知道如何將它使用類別和比較升序排序?謝謝!
使用默認版本:
Collections.sort(myarrayList);
當然,這要求你的元素實現Comparable
,但你提到的版本也是如此。
順便說一句:你應該在你的代碼中使用泛型,這樣你會得到編譯時錯誤,如果你的類沒有實現Comparable。而編譯時錯誤要比你得到的運行時錯誤要好得多。
List<MyClass> list = new ArrayList<MyClass>();
// now fill up the list
// compile error here unless MyClass implements Comparable
Collections.sort(list);
謝謝,只是想知道可以定義一個比較器? – user1097097 2011-12-15 17:11:13
是的,您可以定義並傳遞比較器來排序API – mprabhat 2011-12-15 17:13:57
就扔了這一點那裏...你就不能這樣做:
Collections.sort(myarrayList);
這是一段時間,雖然...
兩種方式來完成這件事:
Collections.sort(myArray)
給定元素在myArray實現內可比較
二
Collections.sort(myArray, new MyArrayElementComparator());
其中MyArrayElementComparator
是Comparator
對myArray的
這裏一個完整的示例中的元素:
假設我們有一個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();
}
}
排序值
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());
您是否在搜索論壇?這個問題每天問一次。 – camickr 2011-12-15 17:26:32