2013-06-05 6 views
1

Я начинаю с Java, и моя проблема в том, что у меня есть Arraylist объектов («Articulos», означает «Статьи»), и этот объект имеет свойства (например, имя, цена и т. Д.). ..). Я хочу сортировать Arraylist по цене каждого объекта. Вот что я пробовал.сортировка целых чисел в arraylist объектов

Во-первых, я заполняю Список_массивов вручную:

public static void Introducir_Articulo(){ 
    Articulo a=new Articulo(); 

    System.out.println("Codigo del articulo: "+(art.size()+1)); 
    if(a.codArt==0){ 
     a.codArt++; 
    } else { 
     a.codArt+=art.size(); 
    } 
    System.out.println("Nombre del articulo: "); 
    a.NombreArt=sc.next(); 

    System.out.println("Precio del articulo: "); 
    a.precio=sc.nextInt(); 

    System.out.println("IVA del articulo: "); 
    a.iva=sc.nextInt(); 

    art.add(a); 
} 

Позже я попробовал этот

//copying the arraylist, so I don't have to change the original 
artOrdenado=new ArrayList<Articulo>(art); 
System.out.println(artOrdenado); 

Collections.sort(artOrdenado, new Comparator<Articulo>(){ 
    public int compare(Articulo uno, Articulo otro){ 
     return uno.getPrecio().compareTo(otro.getPrecio()); 
    } 
}); 

, но он бросает исключение, которое говорит: "INT не может быть deferenced".

ответ

4

вы должны сделать Comparision в вашем компаратора, как это:

Collections.sort(artOrdenado, new Comparator<Articulo>(){ 
    public int compare(Articulo uno, Articulo otro){ 
     return (uno.getPrecio() - otro.getPrecio()); 
    } 

}); 

Или с использованием Integer.compare();

+0

Спасибо! это сработало! Я все еще новичок в java :( – Doruko

+0

@Doruko: Вы приветствуете – CloudyMarble

+0

Примите этот ответ, если он сработает для вас –

0

Я предполагаю, что getPrecio() возвращает int (примитив). Вы не можете вызывать методы для примитивов (они не являются объектами). Вы могут методы вызова на объектах, однако, и если getPrecio() возвращает Integer (объект контрагента к int), то вы должны иметь больше успеха (см here для получения дополнительной информации по этому аспекту Java, называется бокс)

в качестве альтернативы вы можете сравнить Интс непосредственно в методе compare() (например, если price1 < price2, вернуть -1 и т.д.)

0

попробуйте использовать

return uno.getPrecio-otro.getPrecio(); 

Я надеюсь, что getPrecio возвращает значение цен

0

Какого типа возвращающего Значения getPrecio()? Вы определили поведение compareTo() в этом классе? Если вы напечатали номер int, используйте обычные операторы >, < и ==, чтобы сравнить значения и вернуть знак, который вы хотите. Или просто использовать:

Collections.sort(artOrdenado, new Comparator<Articulo>(){ 
    public int compare(Articulo uno, Articulo otro){ 
     return (uno.getPrecio() - otro.getPrecio()); 
    } 
}); 
0

Используйте этот метод для сравнения вместо

public int compare(Articulo uno, Articulo otro) 
{ 
    int comparation= (uno.getPrecio()> otro.getPrecio()) ? 1 : 0; 
    if(comparation== 0) 
    { 
     comparation= (uno.getPrecio()== otro.getPrecio()) ? 0 : -1; 
    } 

return comparation; 
} 
Смежные вопросы