#java #sorting #comparator
#java #сортировка #компаратор
Вопрос:
У меня есть список строк, который хранится в:
List<String> unsorted = new ArrayList<String>();
Учитывая, что мои входные строки являются:
Mohammad Ali: salary is 24K, annual raise is 10% has balance of 317146.70
Steve Gates: salary is 36K, annual raise is 5% has balance of 474608.11
Michael Jordan: salary is 71K, annual raise is 7% has balance of 934461.89
Lora Star: salary is 104K, annual raise is 2% has balance of 1364777.40
Donald Kim: salary is 44K, annual raise is 1% has balance of 577470.66
Bill Jobs: salary is 54K, annual raise is 0% has balance of 706933.71
Я хочу распечатать строки одну за другой на основе порядка возрастания их баланса, то есть последнего значения в строке.
Comparator<String> cmp = new Comparator<String>() {
public int compare(String o1, String o2) {
return (Integer.valueOf(o1.substring(o1.lastIndexOf(" ") 1)).compareTo(Integer.valueOf(o2.substring(o2.lastIndexOf(" ") 1))));
}
};
Collections.sort(unsorted, cmp);
for (int i = 0; i < unsorted.size(); i ){
System.out.println(unsorted.get(i));
}
}
Однако, когда я пытаюсь запустить программу, я сталкиваюсь с ошибкой:
java.lang.NumberFormatException: For input string: "474608.11"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at Main$1.compare(Main.java:35)
at Main$1.compare(Main.java:1)
at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.ArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at Main.main(Main.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
Могу ли я узнать, как это решить?
Комментарии:
1. эта строка не является допустимым целым числом. Попробуйте разобрать ее на double вместо int
2. О, я понимаю, спасибо!!
3.
return (Double.valueOf(o1.substring(o1.lastIndexOf(" ") 1)) .compareTo(Double.valueOf(o2.substring(o2.lastIndexOf(" ") 1))));