问题是我有这个问题。我知道为什么它在开始时,因为它是1和0,因此它在9之前甚至在排序之后。但是,使用列表sort()
方法可以使用正确的顺序吗?
答案 0 :(得分:12)
您需要更改列表以包含数字(例如Integer
s或Double
s)而不是字符串。
答案 1 :(得分:3)
如果列表由于某种原因需要String
s(我似乎不太可能),一个选项(使用Guava)是:
List<String> numbers = ...;
Collections.sort(numbers, Ordering.natural().onResultOf(
new Function<String, Integer>() {
public Integer apply(String from) {
return Integer.valueOf(from);
}
}));
这将根据每个字符串表示的整数值对字符串列表进行排序。如果不是每个字符串都可以解析为整数,则会抛出异常。
答案 2 :(得分:1)
还有一个建议:
如果您需要坚持使用String并且不想使用Number或等效类,则可以实现Comparator<String>
来支持排序算法。这样您就可以根据需要对元素进行排序。
答案 3 :(得分:0)
如果您要对字符串进行排序而不是数字,则此代码可能有助于您了解差异:
ArrayList stringList = new ArrayList();
stringList.add("9");
stringList.add("10");
Collections.sort(stringList);
Assert.assertEquals("10", stringList.get(0));
ArrayList integerList = new ArrayList();
integerList.add(9);
integerList.add(10);
Collections.sort(integerList);
Assert.assertEquals(9, integerList.get(0));
断言JUnit断言。
答案 4 :(得分:0)
正如其他人所说,如果您打算对实际数字进行排序,请不要将它们存储在字符串中。如果你真的想自然地对包含数字的字符串进行排序,我更喜欢使用Apache Commons Collection Utils ComparatorUtils.NATURAL_COMPARATOR,尽管还有其他选项具有不同的可配置性和功能。
答案 5 :(得分:0)
Java本身不支持您可能需要的String
对象的自然排序。有关此问题,请参阅Java Trail。主要原因是由于许多不同的语言等原因造成这样做过于复杂。因此,之前关于将List<String>
更改为List<Integer>
或List<Double>
的答案可能是更好的主意。
但是,Stackoverflow上的this question可能对您有所帮助。
答案 6 :(得分:0)
我无法理解它,因为我创建整数而不是字符串,但它不起作用。
但后来我在代码中看到了一个小错误,我忘记了被注释掉的Integer.parseint(String)
。
无论如何,答案的人都很有帮助,还有许多方法可以解决这个问题。
答案 7 :(得分:0)
序列的词典顺序。