Java 为什么排序()之后的ArrayList开头有10
正如问题所说,我有这个问题。我知道为什么它是在一开始,因为它是1和0,所以它在9之前,甚至在排序之后。但是,列表的排序方法是否正确?您需要将列表更改为包含数字(例如,Java 为什么排序()之后的ArrayList开头有10,java,sorting,arraylist,Java,Sorting,Arraylist,正如问题所说,我有这个问题。我知道为什么它是在一开始,因为它是1和0,所以它在9之前,甚至在排序之后。但是,列表的排序方法是否正确?您需要将列表更改为包含数字(例如,整数s或双精度s)而不是字符串。如果您对字符串而不是数字进行排序,此代码可能有助于您理解差异: ArrayList stringList = new ArrayList(); stringList.add("9"); stringList.add("10"); Collections.sort(str
整数
s或双精度
s)而不是字符串。如果您对字符串而不是数字进行排序,此代码可能有助于您理解差异:
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断言进行断言。正如其他人所说,如果要对实际数字进行排序,请不要将它们存储在字符串中。如果您真的想自然地对包含数字的字符串进行排序,我更喜欢使用Apache Commons Collection Utils ComparatorUtils.NATURAL\u COMPARATOR,尽管还有其他具有不同可配置性和功能的选项。Java本机不支持按您可能需要的方式对
字符串
对象进行自然排序。关于这一点,请参阅。主要原因是由于许多不同的语言等原因,这样做太复杂。因此,前面关于将列表
更改为列表
或列表
的答案可能是一个更好的主意
但是,on Stackoverflow可能对您有所帮助。如果出于某种原因(我似乎不太可能)列表需要为
字符串,则一个选项(使用)是:
列表编号=。。。;
Collections.sort(number,Ordering.natural().onResultOf(
新函数(){
公共整数应用(字符串来自){
返回整数.valueOf(from);
}
}));
这将根据每个字符串表示的整数值对字符串列表进行排序。如果不是每个字符串都可以解析为整数,则将引发异常。还有一个建议:
如果您需要坚持使用字符串,并且不想使用数字或等效类,则可以实现一个比较器来支持排序算法。通过这种方式,您可以根据需要对元素进行排序。我无法理解它,因为我创建的是整数而不是字符串,但它不起作用
但是后来我发现代码中有一个小错误,我忘记了注释掉的Integer.parseint(String)
不管怎么说,这些答案都很有帮助,还有很多其他方法可以解决这个问题。序列的字典顺序。你的问题没有真正意义。也许您可以添加一些代码?我有一种预感,你在分类你在寻找一种“自然分类”。这是前面的一个问题,答案是:也许你在排序字符串
而不是数字
?也许他需要字符串。如果是这样,他应该使用自然的sortKasper,你应该编辑你的问题来提及这一点,或者添加它作为对问题的评论,因为这并不是一个真正的答案。
List<String> numbers = ...;
Collections.sort(numbers, Ordering.natural().onResultOf(
new Function<String, Integer>() {
public Integer apply(String from) {
return Integer.valueOf(from);
}
}));