How to sort an ArrayList with object using stream().sorted()

16,382

Solution 1

You are not storing the results of the sorted array back to collection or array. Stream operations do not mutate the underlying collection:

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

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

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

Solution 2

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

this worked, ty for the answer

Solution 3

Below code is used for to sort the your Publikacija object type Arraylist on behalf of "getCijena"

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

                return s1.getCijena.compareTo(s2.getCijena);
            }
        });'
Share:
16,382
Ludi Dado
Author by

Ludi Dado

Updated on June 12, 2022

Comments

  • Ludi Dado
    Ludi Dado almost 2 years

    I am having real trouble with using stream and sorted to sort my ArrayList and hope someone can help out. The code uses Croatian words, but I don't think that will be a problem for someone who understands what I mean.

    This is the ArrayList

    ArrayList<Publikacija> listaPublikacija = new ArrayList<>();
    
    listaPublikacija.add(prvaKnjiga);
    listaPublikacija.add(drugaKnjiga);
    listaPublikacija.add(prviCasopis);
    listaPublikacija.add(drugiCasopis);
    

    In my assignment I am supposed to sort these objects above by getCijena() which is double.

    This is the best I got and it still doesn't sort it as it should...

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

    Any kind of help or advice appreciated... I already made the sort in different ways, but it is neccessary to sort it via the sorted method in stream...

    I'll post the class script below for easier understanding of the question above:

    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());
    
  • Ludi Dado
    Ludi Dado about 9 years
    That may work with strings...I got no idea how to make it work with my objects