2015-03-25 2 views
1

У меня возникли проблемы с использованием потока и отсортированы для сортировки моего массива ArrayList и надеюсь, что кто-то может помочь. Код использует хорватские слова, но я не думаю, что это будет проблемой для тех, кто понимает, что я имею в виду.Как отсортировать ArrayList с объектом с помощью stream(). Sorted()

Это ArrayList

ArrayList<Publikacija> listaPublikacija = new ArrayList<>(); 

listaPublikacija.add(prvaKnjiga); 
listaPublikacija.add(drugaKnjiga); 
listaPublikacija.add(prviCasopis); 
listaPublikacija.add(drugiCasopis); 

В моем назначении я должен сортировать эти объекты сверху getCijena(), которая в два раза.

Это лучшее, что я получил, и это еще не сортирует его, как он должен ...

listaPublikacija.stream().sorted((s1, s2) -> Double.compare(s1.getCijena(), s2.getCijena())); 

любого вида помощи или совета оценили ... Я уже сделал то по-разному, но это необходимо указывать в сортировать его с помощью отсортированного метода в потоке ...

Я выложу скрипт класса ниже для облегчения понимания выше вопрос:

public Publikacija(String nazivKnjige, int godinaIzdanja, int brojStr, VrstaPublikacije vrstaPub, double cijenaPoStr, double cijena){ 
this.nazivKnjige= nazivKnjige; 
this.godinaIzdanja = godinaIzdanja; 
this.brojStr = brojStr; 
this.vrstaPub = vrstaPub; 
this.cijenaPoStr = cijenaPoStr; 
if(getClass().equals(Casopis.class)){this.cijena= Casopis.CIJENA_PO_PRIMJERKU;} 
else this.cijena = provjeraCijene(cijena(brojStr,vrstaPub,cijenaPoStr).doubleValue()); 
+1

делает 'listaPublikacija.stream() сортируется (Comparator.comparing (е -.> Е. getCijena())); «в итоге получаются те же результаты? – Powerlord

ответ

6

Вы не сохраняете результаты отсортированного массива обратно в коллекцию или массив. операции поток не мутировать основной коллекции:

List<String> names = Arrays.asList("Katka", "Martin", "John"); 

    Object[] sortedNames = names.stream().sorted(String::compareTo).toArray(); 

    System.out.println("array: " + Arrays.toString(sortedNames)); 
+0

Это может работать со строками ... Я понятия не имел, как заставить его работать с моими объектами –

1
Object[] sortirano = listaPublikacija.stream().sorted((s1, s2) -> Double.compare(s1.getCijena(), s2.getCijena())).toArray(); 

это работало, TY для ответа

0
Publikacija[] sortedArray = listaPublikacija.stream() 
    .sorted(Comparators.comparing(Publikacija::getCijena, Double::compareTo) 
    .toArray(); 

ссылка Первый метод извлекает идентифицирующую ключ, второй обеспечивает функцию сравнения.

0

Ниже код используется для сортировать объектную Publikacija типа Список_массивов от имени "getCijena"

' Collections.sort(data, new Comparator<Publikacija>() { 
      public int compare(Publ`enter code here`ikacija s1, Publikacija s2) { 

       return s1.getCijena.compareTo(s2.getCijena); 
      } 
     });'