通过自定义的方式,完成一件事。
参考JDK源码中的Comparator接口,自定义MyComparator接口,以及编写排序算法,通过实现不同的比较器(MyComparator接口的实现类),完成自定义排序功能。
这就是策略模式的一种简单实现。
代码结构
源码
package com.myspringboot.shejimoshi.celue;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
User[] arr = {new User(1, 19), new User(3, 20), new User(2, 18)};
//通过id排序
Sorter.sort(arr, (o1, o2) -> o1.getId() - o2.getId());
System.out.println(Arrays.toString(arr));
//通过age排序
Sorter.sort(arr, (o1, o2) -> o1.getAge() - o2.getAge());
System.out.println(Arrays.toString(arr));
}
}
package com.myspringboot.shejimoshi.celue;
public interface MyComparator<T> {
int compare(T o1, T o2);
}
package com.myspringboot.shejimoshi.celue;
public class Sorter {
public static <T> void sort(T[] arr, MyComparator<? super T> comparator) {
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0 && comparator.compare(arr[j - 1], arr[j]) > 0; j--) {
swap(arr, j, j - 1);
}
}
}
private static <T> void swap(T[] arr, int i, int j) {
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
package com.myspringboot.shejimoshi.celue;
public class User {
private int id;
private int age;
public User(int id, int age) {
this.id = id;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", age=" + age +
'}';
}
}