Search code examples
javalistsortingjava-stream

Sorting a list with stream.sorted() in Java


I'm interested in sorting a list from a stream. This is the code I'm using:

list.stream()
    .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue()))
    .collect(Collectors.toList());

Am I missing something? The list is not sorted afterward.

It should sort the lists according to the item with the lowest value.

for (int i = 0; i < list.size(); i++)
{
   System.out.println("list " + (i+1));
   print(list, i);
}

And the print method:

public static void print(List<List> list, int i)
{
    System.out.println(list.get(i).getItem().getValue());
}

Solution

  • This is not like Collections.sort() where the parameter reference gets sorted. In this case you just get a sorted stream that you need to collect and assign to another variable eventually:

    List result = list.stream().sorted((o1, o2)->o1.getItem().getValue().
                                       compareTo(o2.getItem().getValue())).
                                       collect(Collectors.toList());
    

    You've just missed to assign the result