java8的相關特性

1,爲何要介紹java8的相關特性?java

由於如今的企業大部分已經從java7向java8開始邁進了,用java8的公司愈來愈多了,java8中的一些知識仍是須要了解一些的;數據結構

java8具備如下特色:app

速度更快(底層的數據結構作了一些更新和改動,垃圾回收機制內存結構作了一些改動)
代碼更少(增長了新的語法 Lambda 表達式)
強大的 StreamAPI
便於並行
最大化減小空指針異常(Optional 容器類)dom

 主要內容:
一、Lambda 表達式
二、函數式接口
三、方法引用與構造器引用
四、StreamAPI
五、接口中的默認方法與靜態方法
六、新時間日期 API
七、其餘新特性ide

一,Lambda表達式函數

什麼是lambda表達式?spa

Lambda 表達式是一個匿名函數,咱們能夠把 Lambda 表達式理解爲是一段能夠傳遞的代碼(將代碼像數據同樣進行傳遞)。能夠寫出更簡潔、更靈活的代碼。做爲一種更緊湊的
代碼風格,使得 Java 語言表達能力獲得了提高。Java8 中引入了一個新的操做符」->」該操做符稱爲箭頭操做符或 Lambda 操做符,箭頭操做符將 Lambda 表達式拆分爲兩部分:
左側:Lambda 表達式的參數列表。對應接口中抽象方法的參數列表。右側:Lambda 表達式中所須要執行的功能,即 Lambda 體。對應接口中抽象方法的實現。指針

Lambda  表達式的基礎語法code

public class Java8Test {

    /*
    無參數,無返回值
    * */
    @Test
    public void test01(){
        Runnable r=new Runnable() {
            @Override
            public void run() {
                System.out.println("liuqingfeng");
            }
        };
        r.run();

        System.out.println("****************");
        Runnable r2= () -> System.out.println("hello lambda!");
        r2.run();
    }

//有一個參數,無返回值
    @Test
    public void test02(){
        Consumer<String> con=(t) -> System.out.println(t);
        con.accept("1");
    }

    //只有一個參數,小括號能夠省略不寫
    @Test
    public void test03(){
        Consumer<String> con= t -> System.out.println(t);
        con.accept("2");
    }

    //有兩個以上的參數 ,有返回值 , 而且Lambda體中有多條語句
    @Test
    public void test04(){
        Comparator<Integer> com=(x,y) ->{
            System.out.println("hello world");
            Integer a=Integer.compare(x,y);
            System.out.println(a);
            return a;
        };

        int i = com.compare(8, 4);
        System.out.println(i);
    }


    //若Lambda體中只有一條語句,return  和大括號均可以省略不寫
    @Test
    public void test05(){
        Comparator<Integer>  com = (x,y) -> Integer.compare(x,y);
        System.out.println(com.compare(1,2));
    }

    //Lambda 表達式的參數列表的數據類型能夠省略不寫,由於 JVM 編譯器經過上下文推斷出
    //數據類型,即「類型推斷」
    @Test
    public void test06(){
        Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x, y);
        show(new HashMap<>());// jdk1.8 之後
    }
    public void show(Map<String, Integer> map) {
    }

    //使用函數式接口
    @Test
    public void test7() {
        Integer result = operation(100, (x) -> x * x);
        System.out.println(result);
        result = operation(200, (y) -> y - 100);
        System.out.println(result);
    }
    public Integer operation(Integer num, MyFunction<Integer> mf) {
        return mf.getValue(num);
    }
    @FunctionalInterface
    public interface MyFunction<T> {
        public T getValue(T o);
    }


}

 

二,四大內置核心函數式接口blog

   public class test8_02 {
        /*
         * Consumer<T> 消費型接口
         * void accept(T t);
         */
        @Test
        public  void test01(){
            happy(10000,(m)->System.out.println("杜立宏要去大保健"));
        }
        public void happy(double money, Consumer<Double> con){
            con.accept(money);
        }

        //供給型接口
        @Test
         public void test02(){
            List<Integer> numlist=getNumList(10,()->(int)(Math.random()*100));
            System.out.println(numlist.toString());
        }

        public List<Integer> getNumList(int num,Supplier<Integer> sup){
            List<Integer> list=new ArrayList<>();

            for(int i=0;i<num;i++){
                    list.add(sup.get());
            }
            return list;
        }

        //函數型接口
        @Test
        public void test03(){
            String newStr=strHandler(" shsxt ",(str)->str.trim());
            System.out.println(newStr);
            System.out.println("**********************");
            newStr=strHandler("bjsxt",(str)->str.substring(1,3));
            System.out.println(newStr);
        }



        public String strHandler(String str, Function<String,String> fun){
            return fun.apply(str);
        }

        //斷言型接口
        @Test
        public void test04(){
            List<String> list= Arrays.asList("hello","world","123","ok","God");
           list= stringFilter(list,(str)->str.length()>3);
           System.out.println(list.toString());
        }
        public List<String> stringFilter(List<String> list, Predicate<String> pre){
            List<String> li=new ArrayList<>();
            for(String str:list){
                if(pre.test(str)){
                    li.add(str);
                }
            }
            return li;
        }
相關文章
相關標籤/搜索