java8 lambda表达式之List排序


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM