Java linear table sorting
Foreword: When I was working on JDBC just now, I suddenly felt that order-by was used too much and was not new. My sixth sense told me that Java has a way to sort linear tables. Encapsulate, and then click "." in eclipse. Haha, there is such a static method public static
Modify the record: According to @mythabc's suggestion, another way has been added.
Method 1: Comparator
Benefits: This method is more flexible when running. If you want to change the sorting rules, the original comparison will not be changed. Comparator, and directly create another comparator, just change the new class name of the comparator on the client. This is closer to the opening and closing principle. When multiple comparators are accumulated, various sorting rules can be converted at will, which is quite cool. ; the separation of model and sorting is closer to the single responsibility principle.
1. First define a model:
package model; /** * User.java * * @author 梁WP 2014年3月3日 */ public class User { private String userName; private int userAge; public User() { } public User(String userName, int userAge) { this.userName = userName; this.userAge = userAge; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } }
##2. Then define a comparator and implement java.util .Comparator interface, write comparison rules in the compare() method:
package util; import java.util.Comparator; import model.User; /** * ComparatorUser.java * * @author 梁WP 2014年3月3日 */ public class ComparatorUser implements Comparator<User> { @Override public int compare(User arg0, User arg1) { // 先比较名字 int flag = arg0.getUserName().compareTo(arg1.getUserName()); // 如果名字一样,就比较年龄 if (flag == 0) { return arg0.getUserAge() - arg1.getUserAge(); } return flag; } }
3. Use java.util.Collections when sorting The sort(List list, Comparator c) method:
package test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import util.ComparatorUser; import model.User; /** * TestApp.java * * @author 梁WP 2014年3月3日 */ public class TestApp { public static void main(String[] arg0) { List<User> userList = new ArrayList<User>(); // 插入数据 userList.add(new User("A", 15)); userList.add(new User("B", 14)); userList.add(new User("A", 14)); // 排序 Collections.sort(userList, new ComparatorUser()); // 打印结果 for (User u : userList) { System.out.println(u.getUserName() + " " + u.getUserAge()); } } }
4. Running result:
A 14 A 15 B 14
Method 2: Implement the Comparable interface
Benefits: Directly attach sortable attributes to the model without having to define new classes (no need to define comparators), reducing the number of classes and making it easier to manage and read It's easier when you're there.
1. First define a model, implement the Comparable interface, and write comparison rules in the compareTo() method:
package model; /** * Student.java * * @author 梁WP 2014年3月4日 */ public class Student implements Comparable<Student> { private String studentName; private int studentAge; public Student() { } public Student(String studentName, int studentAge) { this.studentName = studentName; this.studentAge = studentAge; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public int getStudentAge() { return studentAge; } public void setStudentAge(int studentAge) { this.studentAge = studentAge; } @Override public int compareTo(Student o) { // 先比较名字 int flag = this.getStudentName().compareTo(o.getStudentName()); // 如果名字一样,就比较年龄 if (flag == 0) { return this.getStudentAge() - o.getStudentAge(); } return flag; } }
2. Use java when sorting The sort(List list) method in .util.Collections:
package test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import model.Student; /** * TestApp.java * * @author 梁WP 2014年3月4日 */ public class TestApp2 { public static void main(String[] arg0) { List<Student> studentList = new ArrayList<Student>(); // 插入数据 studentList.add(new Student("A", 15)); studentList.add(new Student("B", 14)); studentList.add(new Student("A", 14)); // 排序 Collections.sort(studentList); // 打印结果 for (Student s : studentList) { System.out.println(s.getStudentName() + " " + s.getStudentAge()); } } }
3. Running result:
A 14 A 15 B 14