作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!