package com.fyb.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.ListIterator; public class ListSortTest { public static void main(String[] args) { List<Object> list = new ArrayList<Object>(); list.add("004"); list.add("002"); list.add("003"); list.add("001"); //字符串测试 Arrays.asList(list.toArray(new String[0])).sort(String.CASE_INSENSITIVE_ORDER.reversed()); printList(list); //listIterator测试 ListIterator<Object> ls = list.listIterator(); while(ls.hasNext()){ System.out.println(ls.next()); } List<Consumer> listConsumer = new ArrayList<Consumer>(3); listConsumer.add(new Consumer(1, "13838381438")); listConsumer.add(new Consumer(3, "13838381439")); listConsumer.add(new Consumer(2, "13838381440")); List<Consumer> listConsumerTmp = cloneList(listConsumer); //Lambda表达式 listConsumerTmp.sort((final Consumer c1, final Consumer c2)->c1.getId().compareTo(c2.getId())); printList(listConsumerTmp); //没有类型定义的Lambda表达式 listConsumerTmp = cloneList(listConsumer); listConsumerTmp.sort((c1, c2)->c1.getId().compareTo(c2.getId())); printList(listConsumerTmp); //使用静态方法的引用 listConsumerTmp = cloneList(listConsumer); listConsumerTmp.sort(Consumer::compareById); printList(listConsumerTmp); //使用静态方法的引用 (这种方式编译通过,运行报错,待找原因) listConsumerTmp = cloneList(listConsumer); Collections.sort(listConsumerTmp, Comparator.comparing(Consumer::getMobile)); printList(listConsumerTmp); } /** * 打印list * @param list */ public static <T> void printList(List<T> list){ System.out.println("********* printList ************"); //迭代器列表 list.stream().forEach((ls)->{ System.out.println(ls); }); } public static <T> List<T> cloneList(List<T> list){ List<T> cloneList = new ArrayList<T>(list.size()); ListIterator<T> lts = list.listIterator(); while(lts.hasNext()){ cloneList.add(lts.next()); } return cloneList; } /** * 客户 * @author fybing * */ public static class Consumer{ private Integer id; private String mobile; public Consumer(Integer id, String mobile){ this.id = id; this.mobile = mobile; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } @Override public String toString() { return "id="+id+";mobile="+mobile; } @Override protected Consumer clone() throws CloneNotSupportedException { Consumer consumer = null; try{ consumer = (Consumer)super.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } return consumer; } public static int compareById(Consumer c1, Consumer c2){ if(c1.getId() > c2.getId()){ return -1; }else if(c1.getId() == c2.getId()){ return 0; } return -0; } } }