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;
}
}
– Use Collections. sort() method for sorting the ArrayList in-place, or Java 8 Stream. sorted() to return a new sorted ArrayList of Objects (the original List will not be modified). – For Descending order, just pass Collections.
Streams primarily work with collections of objects and not primitive types. Fortunately, to provide a way to work with the three most used primitive types – int, long and double – the standard library includes three primitive-specialized implementations: IntStream, LongStream, and DoubleStream.
You may do it like so,
List<DateRange> sortedList = listToBeSorted.stream()
.sorted(Comparator.comparingInt(DateRange::getStartRange))
.collect(Collectors.toList());
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));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With