Fra*_*sco 7 java sorting list arraylist
我有一个对象列表,我想用定义的顺序对它进行排序.对于前者 我有一个带有字段的对象String color.我想在颜色字段上对我的列表进行排序,使它总是首先是白色而不是蓝色而不是其他所有(如果可能的话,alph.有序但不是必需的):
Before sorting: After sorting:
orange white
white blue
green yellow
brown orange
yellow black
black brown
... ...
Run Code Online (Sandbox Code Playgroud)
有这么简单的方法吗?
编辑:
我必须添加一个更复杂的...
如果可以有更多颜色具有相同的名称/基数怎么办?对于前者 whiteX,whiteY,whiteZ,blueA,blueB,......
所有的白人都必须比所有的黄色首先出现,而不是所有的黄色.用比较器解决这个问题仍有可能吗?(我无法想象......)
小智 13
这是另一种选择:
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]
Run Code Online (Sandbox Code Playgroud)
nac*_*okk 10
是的,您可以创建一个Comparator来创建排序策略,或者定义实现Comparable的类的自然顺序
作为旁注:
强烈建议,但并非严格要求(x.compareTo(y)== 0)==(x.equals(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
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在客户端代码中.
例:
List<MyClass> list = new ArrayList<>();
//fill array with values
Collections.sort(list, MyClass.COLOR_COMPARATOR );
Run Code Online (Sandbox Code Playgroud)
阅读更多:集合#sort(..)
如果你想定义你的类的自然顺序,只需定义
public class MyClass implements Comparable<MyClass>{
@Override
public int compareTo(MyClass o) {
// do business logic here
}
}
Run Code Online (Sandbox Code Playgroud)
并在客户端代码中:
Collections.sort(myList); // where myList is List<MyClass>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7969 次 |
| 最近记录: |