/** * @Description: 分组工具类 * * @Author: hepengfei * @Date: 15:43 2018/3/20 */ public class GroupUtils { /** * eg: * List list = devider(list, (Apple o1, Apple o2) -> { * return o1.getWeight() == o2.getWeight() ?0 : 1; * }); * @param datas 带分组的list * @param c * @param <T> * @return */ public static <T> List<List<T>> devider(Collection<T> datas, Comparator<? super T> c){ List<List<T>> result = new ArrayList<List<T>>(); for (T t : datas) { boolean isSame = false; for (int i=0;i<result.size();i++) { if (c.compare(t,result.get(i).get(0)) == 0){ isSame = true; result.get(i).add(t); break; } } if (!isSame){ List<T> innerList = new ArrayList<T>(); result.add(innerList); innerList.add(t); } } return result; } /** demo */ public void test(List list){ List devider = devider(list, (Apple o1, Apple o2) -> { return o1.getWeight() == o2.getWeight() ?0 : 1; }); System.out.println(devider); } class Apple{ private int weight; public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } } }
2.Comparable,Comparator
Comparable是为了对某个类的集合进行排序,所以此时一般都是这个需要排序的类本身去实现Comparable接口; 倘若我们要根据其他规则排序,可以匿名内部类或者lambda表达式使用Comparator接口: list.sort(Comparator.comparing(Employee::getSalary).thenComparing(Employee::getName));