gpt4 book ai didi

java - 如何对包含由 '|~' 分隔的多个字段的 List 进行排序

转载 作者:行者123 更新时间:2023-11-29 05:26:01 24 4
gpt4 key购买 nike

我有一个 List<String> theList具有以下类型的值

"2011-05-05|~JKED"
"2011-05-06|~ABC"
"2011-05-01|~XYZ"
"2011-05-01|~WWX"

正如您所猜到的,theList 中有两个“字段” .

我要排序theList在第一个字段然后在第二个字段,例如我在排序操作后得到以下输出

"2011-05-01|~WWX"
"2011-05-01|~XYZ"
"2011-05-05|~JKED"
"2011-05-06|~ABC"

如果我将这两个字段放在单独的列表中并执行 Collections.sort(field1List) Collections.sort(field2List)我得到了想要的输出。

但是,我想知道,如何使用Collections.sort(theList, new Comparator(){})能够在 theList 上方排序以获得所需的输出。如果无法通过 Comparator() 解决,请提出一些类似于 sortMultiFieldList(List<String> theList) 的方法。

说来话长,为什么我必须在一个列表中包含两个或更多字段。

如果您需要更多说明,请告诉我。

最佳答案

这非常简单。您需要为此编写自定义 Comparator,并强制其比较逻辑按照您希望的方式针对两个单独的“字段”进行操作。

这里的动机是这些字段在日期部分以及字母字符串部分按字典顺序进行比较。如果你发现日期比较没有给你准确的结果(而且它可能不会;我不确定它不会立即工作的任何情况),然后将它转换为 Date 并在线比较它。

Collections.sort(entries, new Comparator<String>() {
@Override
public int compare(String left, String right) {
String[] leftFragments = left.split("[|]");
String[] rightFragments = right.split("[|]");
if(leftFragments[0].compareTo(rightFragments[0]) == 0) {
return leftFragments[1].compareTo(rightFragments[1]);
} else {
return leftFragments[0].compareTo(rightFragments[0]);
}
}
});

关于java - 如何对包含由 '|~' 分隔的多个字段的 List<String> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648967/

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