2016-06-13 5 views
0

私は優先順位/シーケンスで注文した商品の概念マスターリストがある場合:アイテムのマスターシーケンスリストに基づいて小さなアイテムのリストをソートするにはどうすればよいですか?

1. dog 

2. cat 

3. fish 

4. bunny 

5. hamster 

、別のリストをどのように私はマスターに基づいて着信リストを並べ替えるない値

["bunny", "dog", "fish"] 

と一緒に来てリスト?したがって、この例では、2番目のリストは、ソートされた後に

["dog", "fish", "bunny"] 

になると予想されます。

これを実装する関数を手作業で書くことができましたが、Javaにはすでにこの種のことを行う組み込み型と最適化された方法があります。このタイプのリストソートをJavaで実現する最善の方法は何ですか?マップに

+0

http://stackoverflow.com/questions/18129807/in-java-how-do-you-sort- one-list-based-on-another – Tunaki

+0

TreeSet <>()を使用します。また、ArrayList <>();のように、Collectionを実装しています。 TreeSetをArrayListに追加できます。 TreeSetは文字列を自動的にソートします。 – LowLevel

答えて

2

できることは、マスターのコピーを作成し、List#retainAllメソッドを使用して、マスターのまま注文を保持することです。

// Master list 
List<String> master = new ArrayList<>(Arrays.asList("dog", "cat", "fish", "bunny", "hamster")); 

// list to sort with respect to master  
List<String> listToSort = new ArrayList<>(Arrays.asList("bunny", "dog", "fish")); 

// copy of master 
List<String> masterCopy = new ArrayList<>(master); 

// keep only the items in masterCopy that are in the listToSort 
masterCopy.retainAll(listToSort); 

System.out.println(masterCopy); 

出力:関連

[dog, fish, bunny] 
2
  1. プロセスリストをmasterList.get("bunny") = 4ように、など
  2. どれソリューションは最大の項目のO(#にする必要があり

    int compare(String a, String b) { 
        return masterList.get(a) - masterList.get(b); 
    } 
    

を使用して独自のComparatorを書きますあなたがソートしているリスト内の項目の位置を見つけるために大規模なリスト全体を検索しなければならないので、最悪の場合、

関連する問題