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;
}
}
}