如果您使用的是Java 8,则可以使用Comparator.comparing(Double::parseDouble)快速创建比较器parseDouble.这应该(见下文)为每个条目调用一次函数,而不是每对一次.
List<String> list = Arrays.asList( "12", "3.5", "188", "33.03" );
list.sort(Comparator.comparing(Double::parseDouble));
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
输出:
[3.5, 12, 33.03, 188]
Run Code Online (Sandbox Code Playgroud)
更新:好吧,我认为这会为每个元素调用比较器函数一次,就像key在Python中使用函数一样,但是在每次调用函数时使用函数增加计数器的快速测试后,函数会被调用使用旧式的"配对"比较器.还是,有点短......
您需要实现自己的比较器,并在列表中使用它.您必须使用BigDecimal,因为您可能会遇到精度损失的问题.你可以使用double,如果你的数字要求小精度.
class MyComparator implements Comparator<String, String> {
public int compare(String o1, String o2){
return new BigDecimal(o1).compareTo(new BigDecimal(o2));
}
}
...
Collections.sort(list, new MyComparator());
Run Code Online (Sandbox Code Playgroud)