7

Here is an example class. I know the simplest thing would be to change the members from primitive type int to object Integer and use stream/lambda/sorted, but there may be reasons to only have a primitive type int such as space. How could I use the streams API to sort a List<DateRange> by int member startRange?

List<DateRange> listToBeSorted = new ArrayList<DateRange>();


static private class DateRange
{
    private int startRange ;
    private int endRange ;
    public int getStartRange() {
        return startRange;
    }
    public void setStartRange(int startRange) {
        this.startRange = startRange;
    }
    public int getEndRange() {
        return endRange;
    }
    public void setEndRange(int endRange) {
        this.endRange = endRange;
    }
}
Boann
  • 48,794
  • 16
  • 117
  • 146

2 Answers2

5

You may do it like so,

List<DateRange> sortedList = listToBeSorted.stream()
    .sorted(Comparator.comparingInt(DateRange::getStartRange))
    .collect(Collectors.toList());
Ravindra Ranwala
  • 20,744
  • 6
  • 45
  • 63
3

I know you asked for a way to do it with streams, but if you are OK with sorting the original list in-place, you don't need streams for this. Just use the List.sort method:

listToBeSorted.sort(Comparator.comparingInt(DateRange::getStartRange));
fps
  • 33,623
  • 8
  • 55
  • 110