# Use Comparator Methods
# Description
In Java 8, new factory methods have been introduced on the Comparator (opens new window) interface to simplify the creation of Comparator objects:
Comparator.naturalOrder()(opens new window)Comparator.reverseOrder()(opens new window)Comparator.comparing(keyExtractor)(opens new window)Comparator.comparingInt(keyExtractor)(opens new window)Comparator.comparingLong(keyExtractor)(opens new window)Comparator.comparingDouble(keyExtractor)(opens new window)
This rule replaces complex lambda expressions which represent Comparator instances by simple invocations of one of the methods listed above.
# Benefits
Reduces the code clutter and improves the readability.
# Tags
# Code Changes
# Natural Order Comparator
Pre
Comparator<User> comparator = (user1, user2) -> user1.compareTo(user2);
Post
Comparator<User> comparator = Comparator.naturalOrder();
# Reversed Order Comparator
Pre
Comparator<User> comparator = (user1, user2) -> user2.compareTo(user1);
Post
Comparator<Integer> comparator = Comparator.reverseOrder();
# Comparing by a Long Property
Pre
Comparator<User> comparator = (user1, user2) -> user1.getUserId().compareTo(user2.getUserId());
Post
Comparator<User> comparator = Comparator.comparingLong(User::getUserId);
# Comparing by a Double Property
Pre
Comparator<User> comparator = (user1, user2) -> user1.getSalary().compareTo(user2.getSalary());
Post
Comparator<User> comparator = Comparator.comparingDouble(User::getSalary);
# Comparing by a Comparable Property
Pre
Comparator<User> comparator = (user1, user2) -> user1.getEmail().compareTo(user2.getEmail());
Post
Comparator<User> comparator = Comparator.comparing(User::getEmail);
# Creating Reversed Comparator by Property
Pre
Comparator<User> comparator = (user1, user2) -> user2.getAge().compareTo(user1.getAge());
Post
Comparator<User> comparator = Comparator.comparingInt(User::getAge).reversed();
# Sorting Collections of Comparables
Pre
users.sort((user1, user2) -> user1.getUserId().compareTo(user2.getUserId()));
Post
users.sort(Comparator.comparingLong(User::getUserId));
🛠️ Auto-refactor Available
You can auto-refactor this with jSparrow.
Drop this button to your Eclipse IDE workspace to install jSparrow for free:
Need help? Check out our installation guide.
# Properties
| Property | Value |
|---|---|
| Rule ID | UseComparatorMethods |
| First seen in jSparrow version | 3.23.0 |
| Minimum Java version | 1.8 |
| Remediation cost | 5 min |