Are you looking for a way to sort a list of weekdays in Java?
In this article, I will show you how you can achieve that using Stream, Enum and DayOfWeek java time api.
Sorting with Enum
One way to sort unordered days of the week list is using Enumeration.
In fact, the order of an instance of Enum is returned via the ordinal() function. This instance method reflects the order in the Enum declaration in which the starting constant is given the ordinal 0 in the Enum declaration. This concept is similar to array indexes.
So letβs declare our enumeration.
public enum WeekDay {
MONDAY("MONDAY"),
TUESDAY("TUESDAY"),
WEDNESDAY("WEDNESDAY"),
THURSDAY("THURSDAY"),
FRIDAY("FRIDAY"),
SATURDAY("SATURDAY"),
SUNDAY("SUNDAY");
private final String value;
WeekDay(String value) {
this.value = value;
}
public static WeekDay fromValue(String value) {
for (WeekDay day : WeekDay.values()) {
if (day.value.equals(value.toUpperCase())) return day;
}
throw new IllegalArgumentException("Unexpected Value β " + value);
}
}
Now consider a method that returns an unordered list of days of the week, maybe taking from a database query.
public static List<String> getWeekDays() {
return new ArrayList<>(
Arrays.asList("Thursday", "Saturday", "Monday", "Friday", "Tuesday", "Sunday", "Wednesday")
);
}
This is how you could sort it.
getWeekDays().stream()
.map(WeekDay::fromValue)
.sorted()
.map(WeekDay::toString)
.collect(Collectors.toList());
Output
> [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
Sorting with DayOfWeek Class
Another way of sorting day of the week is by using DayOfWeek
java.time class. With the previous example, we can have the following
import java.time.DayOfWeek;
//...
//...
getWeekDays().stream()
.map(day -> DayOfWeek.valueOf(day.toUpperCase()))
.sorted()
.map(String::valueOf)
.collect(Collectors.toList());
Output
> [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
Any way, if you want to get the result in the opposite order, you can use java.util.Comparator
.
//...
getWeekDays().stream()
.map(day -> DayOfWeek.valueOf(day.toUpperCase()))
.sorted(Comparator.reverseOrder())
.map(String::valueOf)
.collect(Collectors.toList());
//...
This will then be the output
> [SUNDAY, SATURDAY, FRIDAY, THURSDAY, WEDNESDAY, TUESDAY, MONDAY]
π. Similar posts
How to Use Custom Hooks in React
01 Jun 2025
Understanding Stale Values in React
17 May 2025
Write Cleaner and Faster Unit Tests with AssertJ as a Java Developer
12 May 2025