Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按特定顺序对(数组)列表排序_Java_List_Sorting_Arraylist - Fatal编程技术网

Java 按特定顺序对(数组)列表排序

Java 按特定顺序对(数组)列表排序,java,list,sorting,arraylist,Java,List,Sorting,Arraylist,我有一个对象列表,我想按照定义的顺序对其进行排序。 例如,我有一个带有字段字符串颜色的对象。我想在“颜色”字段中对列表进行排序,使其始终具有白色、蓝色、黄色和所有其他颜色(如果可能,请按alph排序,但无需排序): 有没有(简单的)方法 编辑: 我必须再加上一个复杂的问题如果有更多颜色具有相同的名称/基数,该怎么办?例如,whiteX、whiteY、whiteZ、blueA、blueB、所有的白色必须比所有的蓝色、黄色和其他颜色都排在第一位。用比较器还是有可能解决这个问题的?(我无法想象……是的

我有一个对象列表,我想按照定义的顺序对其进行排序。 例如,我有一个带有字段
字符串颜色的对象。我想在“颜色”字段中对列表进行排序,使其始终具有白色、蓝色、黄色和所有其他颜色(如果可能,请按alph排序,但无需排序):

有没有(简单的)方法

编辑:

我必须再加上一个复杂的问题
如果有更多颜色具有相同的名称/基数,该怎么办?例如,whiteX、whiteY、whiteZ、blueA、blueB、
所有的白色必须比所有的蓝色、黄色和其他颜色都排在第一位。用比较器还是有可能解决这个问题的?(我无法想象……

是的,您可以创建一个用于创建排序策略的方法,或者定义类实现的自然顺序

作为旁注:

强烈建议,但并非严格要求: (x.与(y)==0)==(x.等于(y))

使用比较器的示例:

class MyClass {

private Color color;
private String someOtherProperty;
public static final Comparator<MyClass> COLOR_COMPARATOR = new MyComparator();

//getter and setter

static class MyComparator implements Comparator<MyClass>{

            @Override
            public int compare(MyClass o1, MyClass o2) {
                // here you do your business logic, when you say where a color is greater than other
            }    
}

}
class-MyClass{
私人色彩;
私有字符串或其他属性;
公共静态最终比较器颜色\u比较器=新的MyComparator();
//接二连三
静态类MyComparator实现Comparator{
@凌驾
公共整数比较(MyClass o1,MyClass o2){
//在这里,当你说一种颜色比另一种颜色大时,你就可以做你的业务逻辑了
}    
}
}
和客户端代码

例如:

List<MyClass> list = new ArrayList<>();
//fill array with values
Collections.sort(list, MyClass.COLOR_COMPARATOR );
List List=new ArrayList();
//用值填充数组
Collections.sort(list,MyClass.COLOR\u COMPARATOR);
阅读更多:

如果您想定义类的自然顺序,只需定义

public class MyClass implements Comparable<MyClass>{

        @Override
        public int compareTo(MyClass o) {
           // do business logic here
        }
}
公共类MyClass实现了可比较的{
@凌驾
公共整数比较(MyClass o){
//在这里做业务逻辑
}
}
在客户端代码中:

   Collections.sort(myList); // where myList is List<MyClass>
Collections.sort(myList);//我的列表在哪里

您可以使用
比较器


您可以做的另一件事是为数字设置一些值(比如1到n)。例如,在你的例子中,给白色1,给蓝色2,给黄色3。现在对这些数字进行排序

这里还有一个选项:

Map<Integer, String> tree = new TreeMap<Integer, String>();
    List<String> listOrdre = Arrays.asList("white", "blue", "yellow", "orange", "black", "brown");
    List<String>   myList  = Arrays.asList("orange", "white", "brown", "yellow", "black");

    for (String code : myList) {
        tree.put(listOrdre.indexOf(code), code);
    }

    System.out.println(tree.values()); // -> [white, yellow, orange, black, brown]
Map tree=newtreemap();
List listOrdre=Arrays.asList(“白色”、“蓝色”、“黄色”、“橙色”、“黑色”、“棕色”);
List myList=Arrays.asList(“橙色”、“白色”、“棕色”、“黄色”、“黑色”);
for(字符串代码:myList){
tree.put(listOrdre.indexOf(code),code);
}
System.out.println(tree.values());//->[白色、黄色、橙色、黑色、棕色]

另一种解决方案是将枚举与比较器一起使用,因为枚举已经定义了索引(序号)

首先,按照您希望的排序顺序创建一个包含值的枚举

enum class MyColour {
    WHITE,
    BLUE,
    YELLOW,
    ORANGE,
    BLACK,
    BROWN
}
对于每个对象,您可以使用
myclour.valueOf(“白色”)
获取枚举值。注意:这是区分大小写的

接下来,您可以简单地使用比较器

val sortedList = list.sortedBy { it.colour } // colour being the enum value we defined.

这可能值得一提
val sortedList = list.sortedBy { it.colour } // colour being the enum value we defined.