2013-08-14 3 views
1

У меня есть ценовые значения в формате String («2000», «3000» и т.д.)Java Сортировка Цена Значения по возрастанию и по убыванию

Я хочу Отсортировать Цена Значения

для этого я использовал Ниже Код:

Comparator<Cars> comparator = new Comparator<Cars>() { 

      @Override 
      public int compare(Cars object1, Cars object2) { 
      // return Float.compare(Integer.parseInt(object1.getPrice()), Integer.parseInt(object2.getPrice())); 

      return ((Integer)Integer.parseInt(object1.getPrice())).compareTo((Integer)Integer.parseInt(object2.getPrice())); 

      } 

Если я выполнить Ниже заявление

 Collections.sort(carsList, comparator); 

Я получаю

Error: java.lang.NumberFormatException: Invalid int: "3,000" 

Может ли кто-нибудь помочь?

ответ

3

Integer.parseInt() не будет работать с валютой, содержащей запятые (,). Возможно, вам придется выполнить манипуляции с строкой, чтобы удалить запятую, прежде чем пытаться использовать метод parseInt().

Делать что-то вроде этого:

String obj1Price = object1.getPrice().replaceAll(",",""); 
String obj2Price = object2.getPrice().replaceAll(",",""); 

return ((Integer)Integer.parseInt(obj1Price)).compareTo((Integer)Integer.parseInt(obj2Price))); 
+0

Я попытался кровать и Лонга также получаю ту же ошибку –

+0

@IceCreamSandwitch проверить мой обновленный ответ. –

+0

Спасибо за ваш обновленный ответ, я отвечу на ваш ответ. Но у меня есть еще один запрос, если у меня есть значение «-» как цена, то как сортировка будет работать? –

1
Integer.parseInt("3,000") 

бросает исключение. Вам нужно избавиться от , из строкового представления вашей цены.

Посмотрите here.

2

Измените данные валюты (представление строк), прежде чем передавать их вашему методу, например. Вы можете использовать это:

"2,000".replaceAll(",",""); 
0
return ((Integer)Integer.parseInt(obj1Price.replaceAll(",",""))).compareTo((Integer)Integer.parseInt(obj2Price.replaceAll(",","")))); 

будет работать

1

Попробуйте

Comparator<String> comparator = new Comparator<String>() { 

       @Override 
       public int compare(String object1, String object2) { 
        int i = 0; 
       int j = 0; 
       try { 
        i = NumberFormat.getNumberInstance(java.util.Locale.US).parse(object1).intValue(); 
         j = NumberFormat.getNumberInstance(java.util.Locale.US).parse(object2).intValue(); 
       } catch (ParseException e) { 
       } 
       // return Float.compare(Integer.parseInt(object1.getPrice()), Integer.parseInt(object2.getPrice())); 
        System.out.println("i = " + ((Integer)i) + " , j = " + ((Integer)j)); 

       return ((Integer)i).compareTo(((Integer)j)); 

       } 
      }; 
      System.out.println("xxxxxxxxx = " + comparator.compare("4,000", "3,000")); 
Смежные вопросы