這就有點像外掛,需要的時候可以切換不同的商務邏輯,也就是邏輯與模型分離,這樣的便利性,讓Mix可以不斷地擴充排序邏輯。
建立1個新的class,implements Comparator,同時實作compare()這個method,以name+id作為排序邏輯,先比較name,當等於0時,再來比較id排序。
package org.openyu.java.role.vo.impl; import java.util.Comparator; import org.openyu.java.role.vo.Role; /** * The Class RoleNameComparator. */ public class RoleNameComparator implements Comparator<role> { /** * Instantiates a new role name comparator. */ public RoleNameComparator() { } /* * (non-Javadoc) * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Role o1, Role o2) { long id1 = o1.getId(); long id2 = o2.getId(); String name1 = o1.getName(); String name2 = o2.getName(); // 排序: name+id int result = name1.compareTo(name2); if (result == 0) { if (id1 > id2) { return 1; } else if (id1 < id2) { return -1; } else { return 0; } } return result; } }

實作compare()之後,Mix執行一次測試方法compare(),來查看其結果。
/** * Compare. */ @Test public void compare() { Role role = new RoleImpl(); role.setId(1); role.setName("OpenYu"); // Role role2 = new RoleImpl(); role2.setId(2); role2.setName("OpenYu"); // int result = role.compareTo(role2); System.out.println(result); assertEquals(-1, result); // Role role3 = new RoleImpl(); role3.setId(3); role3.setName("Java"); // Role[] roles = new Role[] { role2, role, role3 }; System.out.println("before sort: "); for (Role r : roles) { System.out.println(r); } // System.out.println(); Arrays.sort(roles, new RoleNameComparator()); System.out.println("after sort: "); for (Role r : roles) { System.out.println(r); } }
測試成功了,滿足了實作 compare()。
console查看其結果。
-1 before sort: [id=2, name=OpenYu, strength=0] [id=1, name=OpenYu, strength=0] [id=3, name=Java, strength=0] after sort: [id=3, name=Java, strength=0] [id=1, name=OpenYu, strength=0] [id=2, name=OpenYu, strength=0]
- 實作compare()。
沒有留言:
張貼留言