首页 > 解决方案 > 如何比较java中列表中的项目?

问题描述

我正在编写一个待办事项列表,我正在尝试使用用户的输入对我的数组进行排序,用户输入是一个字符串,但它是一个日期。

我写了这段代码,但没有用

public static void kir() {
    ArrayList <String> x = new ArrayList <>() {
        {
            add("dsadsadasd 2020-09-09");
            add("dadsaasdas 2019-10-10");
            add("dadadada 2021-10-09");
        }
    };
    ArrayList <String> y = new ArrayList <>();
    int i;
    for (i = 0; i < (x.size() - 1); i++) {
        String m;
        String t;
        m = x.get(i).substring(x.get(i).length() - 10, x.get(i).length() - 7);
        t = x.get(i + 1).substring(x.get(i + 1).length() - 10, x.get(i + 1).length() - 7);
        while (i < (x.size() - 1)) {
            if (m.compareTo(t) >= 0) {
                y.add(x.get(i + 1));
            } 
            else {
                y.add(x.get(i));
            }
            System.out.println(y);
        }
    }
}

它一直让我成为唯一最小的。不给我其他人

标签: java

解决方案


这是向 Java 更深层次的巨大飞跃,但优雅的方法是:

List<String> list = new ArrayList<>();
Collections.addAll(list,
    "dsadsadasd 2020-09-09", "dadsaasdas 2019-10-10", "dadadada 2021-10-09");
list.sort(Comparator.comparing(s -> s.substring(s.length()-10))
                    .thenComparing(s -> s.substring(0, s.length()-10)));
  • List 有一个sort方法,也有一个 Comparator比较两个项目(这里是字符串)。Comparator具有从 lambda(函数)构建 -1/0/+1 比较器以生成密钥的方法。在这两个 lambdas 之上,指定了自己的局部参数 variable s,一个 String,巧合的是,它还生成了一个 String 键,用于比较两个列表元素。

  • 在 java 中,人们经常用最一般的假设 ( List<String> list) 声明一个变量并选择一个实现 ( new ArrayList<>())。实现可能会改变 -new LinkedList()但其余代码仍将保持可编译。


推荐阅读