我有一个字符串列表l=[mean,max,min,std,flag]
我还有另一个枚举
public enum ListOrder{
mean(0),
std(1),
max(2),
min(3),
flag(100);
private int value;
private ListOrder(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
我的尝试:-
Collections.sort(l, new Comparator<ListOrder>() {
@Override
public int compare(ListOrder o1, ListOrder o2) {
// TODO Auto-generated method stub
return 0;
}
});
但是这不起作用,因为ListOrder不是String的超类。谁能帮我怎么做。
答案 0 :(得分:4)
如果List
包含String
,则需要提供一个Comparator<String>
,它看起来像Enum
才能进行排序:
List<String> l = Arrays.asList("mean", "max", "min", "std", "flag");
Collections.sort(l, (o1, o2) -> Integer.compare(ListOrder.valueOf(o1).getValue(),
ListOrder.valueOf(o2).getValue()));
如果List
直接包含ListOrder
,则只需要告诉您是否按所需顺序提供Enum元素即可按值排序
List<ListOrder> l = Arrays.asList(ListOrder.mean, ListOrder.max, ListOrder.min, ListOrder.std, ListOrder.flag);
Collections.sort(l, Comparator.comparing(ListOrder::valueOf));
如果它们按您的顺序排列,那么简单的Collections.sort(l);
就足够了
答案 1 :(得分:1)
枚举已经可以与简单的Collections.sort(l);
ArrayList<ListOrder> l = new ArrayList<ListOrder>();
l.add(ListOrder.mean);
l.add(ListOrder.max);
l.add(ListOrder.min);
l.add(ListOrder.std);
l.add(ListOrder.flag);
Collections.sort(l);
System.out.println(l.toString());
输出:
[mean, std, max, min, flag]
答案 2 :(得分:0)
我可以知道你的魔杖。
@Test
public void test() {
List<String> l = Arrays.asList("mean", "max", "min", "std", "flag");
Collections.sort(l, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return ListOrder.valueOf(o1).getValue() - ListOrder.valueOf(o2).getValue();
}
});
for (String s : l) {
System.out.println(s);
}
}