簡體   English   中英

如何在java中比較列表中的項目?

[英]how to compare items in the list in 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 更深層次的巨大飛躍,但優雅的方式是:

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)));
  • 列表有一個sort方法,也有一個比較如何比較兩個項目(字符串這里)。 Comparator具有從 lambda(函數)構建 -1/0/+1 比較器以生成密鑰的方法。 在兩個 lambda 表達式上方指定了自己的局部參數變量s ,一個字符串,巧合的是,還為其生成了一個字符串鍵,用於比較兩個列表元素。

  • 在 Java 中,人們經常用最一般的假設( List<String> list )聲明一個變量並選擇一個實現( new ArrayList<>() )。 實現可能會改變 - new LinkedList() - 但其余代碼仍將保持可編譯。

創建一個 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());
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM