2011-12-12 59 views
1

在Android中,我有一個Set,我想將它變成排序List如何將一個集合分類到一個列表

如何使用Collections.sort()

protected List<PackageInfo> doInBackground(Void... params) { 

     Set<PackageInfo> adPackages = new HashSet<PackageInfo>(); 
     //ArrayList<PackageInfo> adPackages = new ArrayList<PackageInfo>(); 

     [..............] 

     return new ArrayList<PackageInfo>(adPackages); 
     //return adPackages; 
    } 

回答

6

列表有一個構造函數,它允許您使用任何Collection創建它。然後使用Collections.sort(List list)方法。

E.g.

Set<String> set = new HashSet<String>(); 
set.add("This is a unsorted set"); 
List<String> list = new ArrayList<String>(set); 
Collections.sort(list); // or Collections.sort(list, Comparator); 

乾杯。

+0

如果你打算建議用另一個數據結構填充一個列表,爲什麼不改用* sorted *數據結構來通知OP? – mre

+0

因爲其他人已經說過這種方法..我只是給出了一個不同的選擇。可能有一種情況,OP被限制在一個有序列表中(儘管我無法想象爲什麼),但我的答案只是給出另一種選擇。 :) –

1

我想,這可能會爲你

public void sortArrayPackage(ArrayList<PackageInfo> array) 
{ 
    Collections.sort(array, new Comparator<PackageInfo>(){ 
    public int compare(PackageInfo o1, PackageInfo o2) { 
     System.setProperty("java.util.Arrays.useLegacyMergeSort", "true"); 
     String package1 = o1.packageName; 
     String package2 = o2.packageName; 

     return package1.compareTo(package2); 
    } 
    }); 
} 
2

恕我直言工作,我會用一個SortedSet而不是標準Set,然後使用List接口addAll方法將集合(隱式排序)轉換爲排序列表,而不必在數據結構之外進行任何排序。

請注意,這將要求存儲在這些數據結構中的對象實現接口。

相關問題