我正在尝试对 ArrayList<String>
进行排序。列表中的字符串看起来像这个 "abc 123 def 456"
,我想对列表进行排序,使得最后一个数字最小的字符串排在前面,例如如果元素是
{"abc 123 def 456", "ghi 456 jkl 789", "mno 101 pqr 112"}
然后我希望排序列表首先具有第三个字符串,然后是第一个字符串,然后是第二个字符串。
{"mno 101 pqr 112", "abc 123 def 456","ghi 456 jkl 789"}
就像这样。
我尝试使用 list.split(" ")
、 Double.parseDouble(String)
和 Collections.sort(list)
对其进行排序,但我现在不知道如何将字符串的其余部分与排序数字列表正确连接。
编辑:
String[] numbers = list.get(i).split(" ");
numberList.add(Integer.parseInt(numbers[3]));
Collections.sort(numberList);
现在我知道应该如何对数字进行排序,但我无法将它们与“他们的字符串”的其余部分重新连接。
最佳答案
使用自定义比较器
的简单解决方案:
String[] arr = {"abc 123 def 456", "ghi 456 jkl 789", "mno 101 pqr 112"};
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return getLastNum(o1) - getLastNum(o2);
}
private int getLastNum(String s) {
String[] tokens = s.split(" ");
return Double.parseDouble(tokens[tokens.length - 1]);
}
});
希望这段代码是不言自明的。
关于java - 如何使用字符串列表的部分数字内容对字符串列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242408/