名單上有一個List<String>
和List<Integer>
。兩者都是按照特定的順序(它們是鏈接的)。 List<String>
包含名稱和List<Integer>
它們的值。排序按價值
有沒有辦法按大小對List<Integer>
進行排序,還可以更改List<String>
的排序,以便值和名稱保持關聯?
名單上有一個List<String>
和List<Integer>
。兩者都是按照特定的順序(它們是鏈接的)。 List<String>
包含名稱和List<Integer>
它們的值。排序按價值
有沒有辦法按大小對List<Integer>
進行排序,還可以更改List<String>
的排序,以便值和名稱保持關聯?
您應該使用的List<NameAndValue>
而不是兩個列表(並找到一個更好的名字比NameAndValue,這反映了這些數據實際上代表)。 Java是OO語言。使用對象。這就是他們的目標:包含相關的數據,並提供方法和封裝的行爲。
一旦你有了這個類,您就可以按名稱進行排序,值或兩者兼而有之,並添加如果需要的話將不會是一個問題的附加字段列表。
-您可以使用java.util.TreeMap<Integer, String>
其中實施SortedMap
。它排序在關鍵的自然排序。您可以使用java.util.Comparator<T>
來排序。
從乾淨的代碼角度來看,如果這些屬於一起,這種結構可以重用別的地方,你應該創建一個類從他們的,並使其實現可比:
public SomeClass implements Comparable<SomeClass> {
private Integer id;
private String name;
private Whatever elseIsNeededHere;
/* getters'n'setters*/
// ******** THOU SHALT NEVER FORGET THY FRIENDS, EQUALS AND HASHCODE, OR ELSE THEY TURN TO BE THY FOES ********
@Override
public boolean equals(Object other) { //do what it takes }
@Override
public int hashCode() { //do what it takes! }
/* actually implement Comparable */
@Override
public int compareTo(SomeClass o) {
//null check, and other bloat left out for sake of brevity
return this.id.compareTo(o.getId());
}
}
然後你就可以有一個列表包含屬於什麼在一起,真的很好排序它:
ArrayList<SomeClass> myList = getMyData();
Collections.sort(myList);
而myList
列表實例按您想要的方式排序。
如果你想不同的比較 - 方法,你可以用其他的方式,通過使用Comparators:
Collections.sort(myList,new Comparator<SomeClass>() {
public int compare(SomeClass a, SomeClass b) { // do what it takes }
});
你可以試試這個:
創建一個自定義比較器類,如:
import java.util.Comparator;
/**
* Created by Maddy Sharma on 7/17/2015.
* Contains sorting logic to sort Dialogs by its date(long)
*/
public class DateDialogComparator implements Comparator<UserChatDialog>{
// lhs.getLastMessageDateSent() is the long value
@Override
public int compare(UserChatDialog lhs, UserChatDialog rhs) {
// This line will work in java 7 and Android API Level 19
// return Long.compare(lhs.getLastMessageDateSent(), rhs.getLastMessageDateSent());
'OR'
if(lhs.getLastMessageDateSent()>rhs.getLastMessageDateSent())
return -1;
else if(lhs.getLastMessageDateSent()<rhs.getLastMessageDateSent())
return +1;
return 0;
}
}
把它從活動或片段,如:
ArrayList<UserChatDialog> myList = userChatDialogList;
Collections.sort(myList, new DateDialogComparator());
Log.i("List after sorting is:", "" + userChatDialogList);
哦天哪,我thoght我是第一個用這種方法... – ppeterka
downvoter:關心解釋你的投票嗎? –
哇,最不恰當的downvote有史以來? – ppeterka