使用自定义属性订购数组列表

Dus*_*vic 2 java sorting android arraylist

我有这样的服装尺寸的数组列表:"L","M","XL","XS","S","XXL",我需要按照这样的顺序排列:"XS"," S","M","L","XL","XXL".

Collections.sort(arrayList);
Run Code Online (Sandbox Code Playgroud)

如果我有这个样本的数组:"38","36","34","40",但是没有以上内容.因此我决定使用for循环和交换数组列表中的项目并将它们放在正确的位置,但由于数组列表的大小是动态更改的,我无法确定应该指定哪个位置.

我很确定这可能不是正确的方法,但我愿意接受如何解决这个问题的建议.

现在这里是代码的一部分:

// 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);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

显然,如果数组大小小于5,我将收到错误.

Psh*_*emo 7

在某些列表或地图中按正确顺序存储大小(以提高性能).然后你可以创建自己的比较器,它将检查该列表/地图中搜索大小的位置,并将其与其他元素的位置进行比较.您需要做的就是比较这些位置.

就像是:

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));
    }

};
Run Code Online (Sandbox Code Playgroud)

用法:

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

输出:

[L, M, XL, XS, S, XXL] //before sorting
[XS, S, M, L, XL, XXL] //after sorting
Run Code Online (Sandbox Code Playgroud)