2017-05-26 20 views
2

"L"、 "M"、 "XL"、 "XS"、 "S"、 "XXL"の順で衣服サイズの配列リストがあります。 「XS」、「S」、「M」、「L」、「XL」、「XXL」のような注文があります。 "38"、 "36"、 "34"、 "40" ではなく、上記と:私はこのサンプルの配列を持っている場合カスタムプロパティ付き配列リストの注文

Collections.sort(arrayList); 

は仕事を行います。だから私はループのためにこれを行うと、配列リスト内の項目を交換し、それらを適切な場所に置くことを決めたが、配列リストのサイズが動的に変更されているので、私はどの位置を割り当てる必要があるか分からない。

これは正しい方法ではないかもしれないとは思っていますが、どうすればこの問題を解決できるかについての提案があります。今ここに

は、コードの一部です:

明らか
// Sample clothing sizes 
    List<String> availableSizes = new ArrayList<>(tempSizes); 
    // Sorting array, only works for "34", "38", "36" and etc 
    Collections.sort(availableSizes); 

    if (availableSizes.size() > 0) { 
     for (int i = 0; i < availableSizes.size(); i++) { 
      if (availableSizes.get(i).equals("XS")) { 
       Collections.swap(availableSizes, i, 0); 
      } else if (availableSizes.get(i).equals("S")) { 
       Collections.swap(availableSizes, i, 1); 
      } else if (availableSizes.get(i).equals("M")) { 
       Collections.swap(availableSizes, i, 2); 
      } else if (availableSizes.get(i).equals("L")) { 
       Collections.swap(availableSizes, i, 3); 
      } else if (availableSizes.get(i).equals("XL")) { 
       Collections.swap(availableSizes, i, 4); 
      } else if (availableSizes.get(i).equals("XXL")) { 
       Collections.swap(availableSizes, i, 5); 
      } 
     } 
    } 

配列のサイズが5未満であれば、私はエラーを取得します。

+0

あなたはPOJOのリストを作成することができます提案はありますサイズで一覧は2メンバを入れて言いますsizeinCms、sizeinLetters、sizeinCmsを使って簡単に並べ替えることができるようになりました。 st sorted –

+0

しかし、私はsizesInCmとsizesInLettersの両方を取得していません。いずれかは、cmsまたは手紙になります。 –

+1

より保守的な解決策は、サイズとその '値'を格納する列挙型を作成することです - カスタムコンパレータなしでソートできる数値 – MTCoster

答えて

6

いくつかのリストまたはマップで正しいサイズでサイズを格納します(パフォーマンスが向上する可能性があります)。次に、リスト/マップ内の検索されたサイズの位置をチェックし、それを他の要素の位置と比較する独自のComparatorを作成できます。これらのポジションを比較するだけです。

のような何か:

private static Comparator<String> sizeComparator = new Comparator<String>() { 

    private Map<String,Integer> sizes = new HashMap<>(); 
    { 
     int i=0; 
     for (String size : new String[]{"XS", "S", "M", "L", "XL", "XXL"}){ 
      sizes.put(size,i++); 
     } 
    } 

    @Override 
    public int compare(String o1, String o2) { 
     return Integer.compare(sizes.get(o1),sizes.get(o2)); 
    } 

}; 

使用法:

List<String> list = Arrays.asList("L", "M", "XL", "XS", "S", "XXL"); 
System.out.println(list); 
list.sort(sizeComparator); 
System.out.println(list); 

出力:

[L, M, XL, XS, S, XXL] //before sorting 
[XS, S, M, L, XL, XXL] //after sorting 
+0

すばらしい解決策!感謝万円。 –

関連する問題