In this article, we will examine different ways to write Comparators in java to sort the multidimensional arrays. Comparator is a functional interface in java.
java.util.Arrays class contains various utility methods to manipulate arrays one of the important methods is Sort.
This method takes two parameters the array that needs to be sorted and the optional Comparator. If we don't pass the Comparator then the array will be sorted based on the natural ordering of the elements.
Sorting Array
Our Array
Let's say we want to represent multiple points with x,y coordinates in an array. The following represents one such example.
{ { 20, 25 },{ 10, 15 }, { 10, 25 }, { 20, 15 }}
We want to sort the array based on x and y-axis values.
Comparators
Comparator Implementation as a Class
Here we are implementing a Comparator called MultiDimArrayComparator and then we can use this comparator to sort Array
class MultiDimArrayComparator implements Comparator {
@Override
public int compare(int[] m, int[] n) {
return m[0] == n[0] ? m[1] - n[1] : m[0] - n[0];
}
}
Arrays.sort(arr, new MultiDimArrayComparator());
Comparator as an anonymous class
Here we are implementing Comparator as an anonymous class and providing a definition of compare method.
Arrays.sort(arr, new Comparator() {
@Override
public int compare(int[] m, int[] n) {
return m[0] == n[0] ? m[1] - n[1] : m[0] - n[0];
}
});
Comparator as lambda expression (Java 8+)
Here we are implementing Comparator as a lambda function.
Arrays.sort(arr, (m, n) -> m[0] == n[0] ? m[1] - n[1] : m[0] - n[0]);
Full Example
public class ArraysSort {
public static void main(String[] args) {
int arr[][] = { { 20, 25 },{ 10, 15 }, { 10, 25 }, { 20, 15 }};
int arr1[][] = arr;
Arrays.sort(arr1, new MultiDimArrayComparator());
System.out.println("Sorted Result");
for (int[] x : arr1) {
System.out.println(x[0] + " " + x[1]);
}
arr1 = arr;
Arrays.sort(arr1, new Comparator<int[]>() {
@Override
public int compare(int[] m, int[] n) {
return m[0] == n[0] ? m[1] - n[1] : m[0] - n[0];
}
});
System.out.println("Sorted Result");
for (int[] x : arr1) {
System.out.println(x[0] + " " + x[1]);
}
arr1 = arr;
Arrays.sort(arr1, (m, n) -> m[0] == n[0] ? m[1] - n[1] : m[0] - n[0]);
System.out.println("Sorted Result");
for (int[] x : arr1) {
System.out.println(x[0] + " " + x[1]);
}
}
}
class MultiDimArrayComparator implements Comparator<int[]> {
@Override
public int compare(int[] m, int[] n) {
return m[0] == n[0] ? m[1] - n[1] : m[0] - n[0];
}
}
Running the code
Sorted Result
10 15
10 25
20 15
20 25
Sorted Result
10 15
10 25
20 15
20 25
Sorted Result
10 15
10 25
20 15
20 25
Conclusion
Here we implemented the same Comparator to sort two-dimensional arrays in three different styles.
No comments :
Post a Comment
Please leave your message queries or suggetions.