大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java8新特性
Java9新特性

Java8方法引用

方法引用可以讓你重復(fù)使用現(xiàn)有的方法定義, 并像Lambda一樣傳遞它們. 如:

list.forEach( x -> System.out.println(x) );

使用方法引用可以這樣:

list.forEach( System.out::println );

方法引用可以看作是僅僅調(diào)用特定方法的Lambda表達(dá)式的一種快捷寫法。

需要使用方法引用時(shí), 目標(biāo)引用放在分隔符::前面, 方法名放在::的后面, 注意,只需要方法名不需要小括弧。

(Student stu) -> stu.getScore() 改為方法引用: Student::getScore

() ->Thread.currentThread().dumpStack() 改為方法引用: Thread.currentThread()::dumpStack

(Str, i) -> Str.substring(i) 改為方法引用: String::substring

a -> System.out.println(a) 改為方法引用: System.out::prinltn

如何構(gòu)建方法引用

方法引用主要有三類:

● 指向靜態(tài)方法的方法引用

Lambda表達(dá)式: (args) -> ClassName.staticMethod(args)

方法引用: ClassName::staticMethod

Integer[] data ={65,23,87,2,34,99};

Arrays.sort( data, Integer::compare );

● 指向任意類型的實(shí)例方法的引用

Lambda表達(dá)式 (args0, args1) -> args0.instanceMethod(args1)

args0是Classname類型的一個(gè)對(duì)象。

方法引用: Classname :: instanceMethod

● 指向現(xiàn)有對(duì)象的實(shí)例方法的引用

Lambda表達(dá)式: (args) -> obj.instanceMethod(args)

方法引用: obj::instanceMethod

public class Test05MethodReference {
    public static void main(String[] args) {
        Integer[] data  ={65,23,87,2,34,99};
        Arrays.sort(  data,  Integer::compare );        //引用靜態(tài)方法
        System.out.println(Arrays.toString(data));

        List<String> list = Arrays.asList("WKcto", "Abc", "XXx");
        list.sort(String::compareTo);               //引用實(shí)例方法
        System.out.println(list);

        list.forEach(System.out::println);      //對(duì)System.out這個(gè)實(shí)例方法的引用
    }
}

構(gòu)造方法引用

對(duì)于一個(gè)現(xiàn)有的構(gòu)造方法,可以使用類名和關(guān)鍵字new來(lái)創(chuàng)建一個(gè)構(gòu)造方法的引用: Classname::new

package com.wkcto.lambda;

import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * author: 動(dòng)力節(jié)點(diǎn)老崔
 * 2019/3/13
 */
public class Test06ConstructorReference {
    public static void main(String[] args) {
        //1)引用無(wú)參構(gòu)造方法
        Supplier<Person> supplier = Person::new;
        Person p1 = supplier.get();
        System.out.println(p1);

        //2)引用有一個(gè)參數(shù)的構(gòu)造方法
        Function<String,Person> function = Person::new;
        Person p2 = function.apply("feifei");
        System.out.println( p2 );

        //3)引用有兩個(gè)參數(shù)的構(gòu)造方法
        BiFunction<String,Integer,Person> biFunction = Person::new;
        Person p3 = biFunction.apply("feifei", 28);
        System.out.println(p3);

        //4)如果引用有三個(gè)參數(shù)及三個(gè)以上參數(shù)的構(gòu)造方法,需要自定義匹配的函數(shù)式接口
        TriFunction<String, Integer, String, Person> triFunction = Person::new;
        Person p4 = triFunction.apply("laodu", 35, "男");
        System.out.println(p4 );
    }
}

@FunctionalInterface
interface TriFunction<T,U,V,R>{
    R apply(T t, U u, V v);
}

class  Person{
    String name;
    int age;
    String gender;

    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name) {
        this.name = name;
    }

    public Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

Lambda練習(xí)

package com.wkcto.lambda;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * author: 動(dòng)力節(jié)點(diǎn)老崔
 * 2019/3/13
 */
public class Test07Exercise {
    public static void main(String[] args) {
        //定義List集合存儲(chǔ)Student
        List<Student> list = new ArrayList<>();
        list.add( new Student("lisi", 80));
        list.add( new Student("zhangsan", 30));
        list.add( new Student("wangwu", 90));
        list.add( new Student("feifei", 60));
        list.add( new Student("mingge", 100));
        System.out.println(list);

        //使用匿名內(nèi)部類排序
        list.sort(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.name.compareTo(o2.name);
            }
        });
        System.out.println(list);

        //使用Lambda表達(dá)式
        list.sort((p1,p2) -> p2.name.compareTo(p1.name));
        System.out.println(list);

        //Comparator接口中有一個(gè)comparing靜態(tài)方法返回Comparator比較器
        list.sort(Comparator.comparing((stu)->stu.name));
        System.out.println(list);

        //方法引用,Student類中g(shù)etScore方法返回成績(jī)
        list.sort(Comparator.comparing(Student::getScore));
        System.out.println(list);
    }
}

class  Student{
    String name;
    int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }

    public int getScore() {
        return score;
    }
}

 

全部教程
主站蜘蛛池模板: 国产精品久久久久影院嫩草 | 正在播放久久 | 国产青草视频免费观看97 | 请看一下欧美一级毛片 | 日韩在线第二页 | 亚洲成人在线网 | 97人人艹| 免费看色 | 成人国产亚洲 | 国产va免费精品 | 欧美人成一本免费观看视频 | 极品福利 | 欧美成人午夜在线全部免费 | 欧美片欧美日韩国产综合片 | 欧美成人精品不卡视频在线观看 | 亚洲va国产日韩欧美精品色婷婷 | 色偷偷要色偷偷网站视频在线 | 欧美日韩在线播一区二区三区 | 在线视频一区二区日韩国产 | 欧美午夜性春 | 中文字幕亚洲综合久久菠萝蜜 | 欧美色久| 91视频首页| 美利坚永久精品视频在线观看 | 免费网站看v片在线成人国产系列 | 99久久国产 | 欧美乱大交xxxxxx喷潮免费 | 日本最新免费二区 | 国产成人a∨麻豆精品 | 十级毛片 | swag国产精品一区二区 | 精品久久久久久国产免费了 | 99热久久国产精品一区 | 久久泄欲网 | 不卡一区二区在线观看 | 欧美亚洲天堂 | 欧美 日韩 中字 国产 | 免费国产成人综合 | 手机看片日韩日韩国产在线看 | 瑟瑟视频在线观看 | 亚洲精品国产啊女成拍色拍 |