所以我试图通过使用2d字符串数组的第2列将它从最高值到最低值进行排序。
通过在线查看答案似乎很简单,我所要做的就是制作自己的比较器。
代码中的内容如下所示
Arrays.sort(stockPriceAndNameSorted, new Comparator<String[]>() {
@Override
public int compare(final String[] entry1, final String[] entry2) {
return entry1[1].compareTo(entry2[1]);
}
});
但正如你所看到的那样,它没有被按顺序排列,例如我给它的值1,2,3,4,5它可以正常工作。然而,将其更改为1,11,3,4,5并且它不能正常工作。
答案 0 :(得分:0)
您比较了String
值,这导致与数字顺序不同的顺序。比较整数值:
Arrays.sort(stockPriceAndNameSorted, new Comparator<String[]>() {
@Override
public int compare(final String[] entry1, final String[] entry2) {
return Integer.valueOf(entry1[1]).compareTo(Integer.valueOf(entry2[1]));
}
});
如果您的字符串中包含带小数点的数字,则可能需要将另一个数字类替换为Integer
。此外,如果字符串值无法解析为数字,您可能希望处理可能出现的NumberFormatException
。
答案 1 :(得分:0)
按字母顺序排序,这对字符串有意义。您应该使用数字而不是字符串来表达您想要的内容。
或者,您可以这样做:
int price1 = Integer.parseInt(entry1[1]);
int price2 = Integer.parseInt(entry2[1]);
return Integer.compare(price1, price2);
但说实话,这感觉有点难看。
更好的方法是(我省略了吸气剂等):
class Item {
String name;
int price;
}
Item[] items = ...; //or use an ArrayList
Arrays.sort((stockPriceAndNameSorted, new Comparator<String[]>() {
@Override
public int compare(final Item entry1, final Item entry2) {
return Integer.compare(entry1.price, entry2.price);
}
});