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

如何在java中比较列表中的项目?,java,Java,我正在写一个待办事项列表,并尝试使用用户的输入对数组进行排序,用户的输入是一个字符串,但它是一个日期 我写了这段代码,但它不起作用 public static void kir() { ArrayList <String> x = new ArrayList <>() { { add("dsadsadasd 2020-09-09"); add("dadsaasdas 2019-10-10");

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

我写了这段代码,但它不起作用

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);
        }
    }
}
publicstaticvoidkir(){
ArrayList x=新的ArrayList(){
{
添加(“dsadsadasd 2020-09-09”);
添加(“dadsaasdas 2019-10-10”);
添加(“dadadada 2021-10-09”);
}
};
ArrayList y=新的ArrayList();
int i;
对于(i=0;i<(x.size()-1);i++){
字符串m;
字符串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);
而(i<(x.size()-1)){
如果(m.compareTo(t)>=0){
y、 加(x.get(i+1));
} 
否则{
y、 加(x.get(i));
}
系统输出打印项次(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)));
List List=new ArrayList();
Collections.addAll(列表,
“dsadsadasd 2020-09-09”、“DADSASAS 2019-10-10”、“dadadada 2021-10-09”);
list.sort(Comparator.comparing(s->s.substring(s.length()-10))
.然后比较(s->s.substring(0,s.length()-10));
  • 列表有一个
    sort
    方法,还带有一个比较器,用于比较两个项目(此处为字符串)。具有从lambda构建-1/0/+1比较器的方法 (函数)生成密钥。在两个lambda的上方,指定有自己的局部参数变量
    s
    ,一个字符串,同时也为其生成一个字符串键,用于比较两个列表元素

  • 在java中,通常使用最一般的假设(
    List
    )声明一个变量,并选择一个实现(
    newarraylist()
    )。实现可能会更改-
    新建LinkedList()
    -但其余代码仍将保持可编译状态


创建一个POJO类来保存ToDo项目,并让该类实现排序的
可比
接口

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());
    } 
}
public类ToDoItem实现了可比较的{
字符串项;
本地日期;
//接球手和接球手。。。
@凌驾
公共整数比较(ToDoItem项){
返回此.date.compareTo(item.getDate());
} 
}

首先,您需要一些正确的变量名。你的问题中的
x
y
m
t
是什么?第二,不要使用双括号数组初始化()好的,但是有什么解决方案吗?你的程序崩溃了吗?它是否正确结束了?可能是重复的吗?你试过调试你的代码了吗?很抱歉,对于那些变量名和神奇数字,我无法猜测
x.get(i).substring(x.get(i).length()-10,x.get(i).length()-7)
的意思。