我有一个对象列表,我想用定义的顺序对它进行排序.
对于前者我有一个字段字符串颜色的对象.我想在颜色字段上对我的列表进行排序,使它总是首先是白色而不是蓝色而不是其他所有(如果可能的话,alph.有序但不是必需的):
对于前者我有一个字段字符串颜色的对象.我想在颜色字段上对我的列表进行排序,使它总是首先是白色而不是蓝色而不是其他所有(如果可能的话,alph.有序但不是必需的):
Before sorting: After sorting: orange white white blue green yellow brown orange yellow black black brown ... ...
有这么简单的方法吗?
编辑:
我必须添加一个更复杂的…如果可以有更多颜色具有相同的名称/基数怎么办?对于前者whiteX,whiteY,whiteZ,blueA,blueB,……所有的白人都必须比所有的黄色首先出现,而不是所有的黄色.用比较器解决这个问题仍有可能吗? (我无法想象……)
解决方法
是的,您可以创建一个
Comparator来创建排序策略,或者定义实现
Comparable的类的自然顺序
作为旁注:
It is strongly recommended,but not strictly required that
(x.compareTo(y)==0) == (x.equals(y))
使用比较器的示例:
class MyClass { private Color color; private String someOtherProperty; public static final Comparator<MyClass> colorComparator = 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 } } }
并在客户端代码中.
例:
List<MyClass> list = new ArrayList<>(); //fill array with values Collections.sort(list,MyClass.colorComparator );
阅读更多:Collections#sort(..)
如果你想定义你的类的自然顺序,只需定义
public class MyClass implements Comparable<MyClass>{ @Override public int compareTo(MyClass o) { // do business logic here } }
并在客户端代码中:
Collections.sort(myList); // where myList is List<MyClass>