// Event.java
public class Event implements Comparable<Event> {
    ...
    @Override
    public int compareTo(Event other) {
        return this.priority - other.priority; 
        // sorts by priority, ascending
    }
    ...
}

// Main.java
...
    List<Event> sorted = events.stream()
            .sorted() // calls compareTo() internally
            .toList();
...
}

Similar to toString(). When we implement Comparable<Event>, it’s an interface. So we have to implement compareTo. Whatever you write in compareTo becomes the natural ordering: