代码之家  ›  专栏  ›  技术社区  ›  Sunny

根据枚举对列表数据排序

  •  -2
  • Sunny  · 技术社区  · 7 年前

    我有一串绳子 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不是字符串的超类。有人能帮我怎么做吗?

    3 回复  |  直到 7 年前
        1
  •  4
  •   azro    7 年前
    1. 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()));
      

      Workable Demo


    1. ListOrder

      List<ListOrder> l = Arrays.asList(ListOrder.mean, ListOrder.max, ListOrder.min, ListOrder.std, ListOrder.flag);
      Collections.sort(l, Comparator.comparing(ListOrder::valueOf));
      

      Workable Demo

      Collections.sort(l);

        2
  •  1
  •   jguyet    7 年前

    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]
    
        3
  •  0
  •   袁健凯    7 年前

    @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);
        }
    }