Сортировка строки в соответствии с порядком возрастания последнего слова

#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))));