gpt4 book ai didi

java - 按第三个元素对字符串数组列表进行排序

转载 作者:行者123 更新时间:2023-12-01 14:07:51 25 4
gpt4 key购买 nike

我正在尝试按第 3 个元素对字符串数组列表进行排序。第三个元素是日期值。几个小时以来,我一直在尝试通过交换来解决这个问题,但仍然无法解决这个问题。对于我当前的 List,我认为 Arrays.sort() 不是理想的选择,这就是我通过循环对其进行排序的原因。

List<String[]> Record = new ArrayList<>();
Record.add(new String[] { "0001047166", "11047161", "20191223", "20200916" });
Record.add(new String[] { "0001047166", "11047162", "20191223", "20200916" });
Record.add(new String[] { "0001047166", "11047163", "20191222", "20200916" });
Record.add(new String[] { "0001047166", "11047166", "20191218", "20200916" });
Record.add(new String[] { "0001047359", "11047359", "20191217", "20200917" });

int size = Record.size();
int swapIndex = 0;
for (int i = 0; i < size-1; i++) {
String[] currentArray = Record.get(i); //get array on current index
String date = currentArray[2]; //get the date on 3rd position, index 2 of current array
swapIndex = i;
for (int j = i + 1; j < Record.size(); j++) {
String[] nextArray = Record.get(j); //get the next array (i + 1)
String otherDate = nextArray[2]; //get the date on 3rd position, index 2 of next arrray
if (date.compareTo(otherDate) > 0) {
String[] currArray = currentArray; //save the current array to temp
//swap
Record.set(swapIndex, nextArray);
Record.set(j, currArray);
swapIndex++;
}
}
}

//Display result
for (String[] a : Record) {
System.out.println(a[2]);
}

我得到的输出是

20191222 (wrong)
20191217
20191218
20191223
20191223

期望的输出:

20191217
20191218
20191222
20191223
20191223

如果有任何想法或建议,我将不胜感激。

谢谢。

最佳答案

您可以使用带有自定义比较器的 lambda 进行排序,该比较器使用第三个(字符串)日期:

Record.sort((String[] sa1, String[] sa2) -> sa1[2].compareTo(sa2[2]));
Record.stream().forEach(sa -> System.out.println(sa[2]));

这打印:

20191217
20191218
20191222
20191223
20191223

请注意,理想情况下,您应该比较某种真正的日期类型,而不是日期字符串。话虽如此,鉴于您的日期字符串似乎是 ISO 格式,按文本排序应该可行。此外,Java 命名约定认为变量名不应以大写字母开头。因此,理想情况下,您的列表应称为 record 而不是 Record

关于java - 按第三个元素对字符串数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62401936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com