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.