java - 如何比较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)));
List 有一个
sort
方法,也有一个 Comparator来比较两个项目(这里是字符串)。Comparator
具有从 lambda(函数)构建 -1/0/+1 比较器以生成密钥的方法。在这两个 lambdas 之上,指定了自己的局部参数 variables
,一个 String,巧合的是,它还生成了一个 String 键,用于比较两个列表元素。在 java 中,人们经常用最一般的假设 (
List<String> list
) 声明一个变量并选择一个实现 (new ArrayList<>()
)。实现可能会改变 -new LinkedList()
但其余代码仍将保持可编译。
推荐阅读
- c++ - 带有 ispc 编译器的 SPMM 内核产生错误的错误结果
- php - Apache rewriting my encoded filename with special characters
- flutter - 将 facebook_audience_network 更新为 0.9.0 时出错
- python - 按最后一列中的值过滤数组
- javascript - 防止 SwiperJS 滑过最后一张幻灯片
- python - Python 中的 Twitter 情绪分析,Pandas 中的词形还原
- php - 从服务器的 [NGINX] MySQL 数据库创建和重新创建本地 Android 数据库
- r - 为什么 vglm 中的变量顺序会对 Hosmer Lemeshow 测试产生影响?
- django - Django Channels 2.4 ... WebSocket 消息是否总是按顺序到达
- python - 如何使用 python 和 pandas 重命名子文件夹中的多个 .Json 文件