如何在Java中比较列表中的项目?

时间:2019-07-16 07:05:29

标签: 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);
        }
    }
}

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

2 个答案:

答案 0 :(得分:2)

这是向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方法,还带有一个 how 比较器,用于比较两个项目(此处为字符串)。 Comparator具有从lambda构建-1 / 0 / + 1比较器的方法 (功能)生成密钥。在两个lambda上方指定自己的局部参数变量s,即一个String,同时为该字符串生成一个String键,用于比较两个列表元素。

  • 在Java中,通常使用最笼统的假设(List<String> list)声明变量,然后选择实现(new ArrayList<>())。实现可能会更改-new LinkedList()-但其余代码仍可编译。

答案 1 :(得分:0)

创建一个POJO类来保存您的ToDo项目,并让该类实现Comparable接口进行排序

public class ToDoItem implements Comparable<ToDoItem> {
    String item;
    LocalDate date;

    //getters and setters...

    @Override
    public int compareTo(ToDoItem item) {
        return this.date.compareTo(item.getDate());
    } 
}