# 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 |