java - 使用自定义属性排序数组列表

标签 java android sorting arraylist

我有一个包含衣服尺码的数组列表,顺序为:“L”、“M”、“XL”、“XS”、“S”、“XXL”,我需要按如下顺序排列:“XS "、"S"、"M"、"L"、"XL"、"XXL"。

Collections.sort(arrayList);

如果我有这个样本的数组,将完成这项工作:“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);
            }
        }
    }

显然,如果数组大小小于 5,我会得到一个错误。

最佳答案

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

类似于:

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

关于java - 使用自定义属性排序数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199146/

相关文章:

java - 类对象定义排序行为

Mysql 像描述的那样对我的表中的数据进行排序

java - 我想在 android 中以编程方式下载文件,但是运行时它关闭了?

android - 无法在 Android 应用程序中使用 libspotify 12

java - 关注第二个文本字段 Wicket

java - 如何解决com.android.internal.R.drawable.hover_tooltip_bg?

java - 从 ColorPickerDialog.java 中检索颜色信息

javascript - 稳定排序动态创建的包含重复项的数组(javascript)

java - 当我检索一些数据以在对话框上显示时,JOptionPane.showConfirmDialog 在 netbeans 中不起作用

java - Swagger Spring 注解 : proper response formatting