溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Lambda表達(dá)式的說(shuō)明和實(shí)例用法

發(fā)布時(shí)間:2021-09-04 14:11:58 來(lái)源:億速云 閱讀:131 作者:chen 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“Lambda表達(dá)式的說(shuō)明和實(shí)例用法”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Lambda表達(dá)式,一種簡(jiǎn)單的匿名內(nèi)部類(但是只能對(duì)應(yīng)  只有一個(gè)抽象方法的接口-->函數(shù)式接口)

- 舉例

  - 無(wú)參  基礎(chǔ)運(yùn)用

    ```java

    interface InterfaceA{

        public void show();

    }

    public class Demo1 {

        public static void main(String[] args) {

            //匿名內(nèi)部類

            InterfaceA a = new InterfaceA() {

                public void show() {

                    System.out.println("匿名內(nèi)部類的show");

                }

            };

            a.show();

            //通過(guò)lambda表達(dá)式

            InterfaceA b = ()->{

                System.out.println("lambda表達(dá)式的show");

            };

            b.show();

            //簡(jiǎn)化

            InterfaceA bb = ()->System.out.println("簡(jiǎn)化的lambda表達(dá)式的show");

            bb.show();

        }

    }

    ```

  - 帶參數(shù) 基礎(chǔ)運(yùn)用

    ```java

    interface A{

        public int add(int i,int j);

    }

    class B{

        public int bAdd(int i,int j){

            return i+j;

        }

    }

    public class Lambda {

        public static void main(String[] args) {

            //lambda表達(dá)式需要返回值,而它的代碼塊中僅有一條省略了return的語(yǔ)句

            //lambda表達(dá)式會(huì)自動(dòng)返回這條語(yǔ)句的結(jié)果

            //A a=(i,j)->{return i+j;};   

            A a=(i,j)->i+j; //基礎(chǔ)用法,這就很類似匿名內(nèi)部類了

            System.out.println(a.add(4,5));

        }

    }

    interface A{

        public int add(int i,int j);

    }

    class B{

        public int bAdd(int i,int j){

            return i+j;

        }

    }

    public class Lambda {

        public static void main(String[] args) {

            A a=new B().bAdd();//思想?yún)⒖?nbsp;C#  委托

            System.out.println(a.add(4,5));

        }

    }

    interface A{

        public int add(int i,int j);

    }

    class B{

        //靜態(tài)

        public static int bAdd(int i,int j){

            return i+j;

        }

    }

    public class Lambda {

        public static void main(String[] args) {

            //調(diào)用方式不一樣了

            A a=B::bAdd;//思想?yún)⒖?nbsp;C#  委托

            System.out.println(a.add(4,5));

        }

    }

    ```

  - 引用類方法

    ```java

    interface Converter{

        //將字符串轉(zhuǎn)換成整數(shù)

        Integer convert(String value);

    }

    class Test1{

        public static void fun1() {

            //原來(lái)的方法

            Converter converter = value->Integer.valueOf(value);

            Integer v1 = converter.convert("222");

            System.out.println(v1);

            //簡(jiǎn)化

            //引用類方法

            //通過(guò)::實(shí)現(xiàn),這里會(huì)自動(dòng)將lambda表達(dá)式方法的參數(shù)全部傳遞給當(dāng)前的方法

            Converter converter2 = Integer::valueOf;

            Integer v2 = converter2.convert("333");

            System.out.println(v2);

        }

    }

    ```

  - 引用特定對(duì)象的實(shí)例方法

    ```java

    interface IA{

        public void show(String message);

    }

    class A{

        public void play(String i) {

            System.out.println("這里是A的方法play"+"  i:"+i);

        }

    }

    class Test2{

        public static void fun2() {

            //原來(lái)

            IA ia = message->new A().play(message);

            ia.show("hello");

            //簡(jiǎn)化

            IA ia2 = new A()::play;

            ia2.show("world");

        }

    }

    ```

  - 引用構(gòu)造方法

    ```java

    interface IC{

        Object show(String name,int age);

    }

    class Person{

        String name;

        int age;

        public Person(String name, int age) {

            super();

            this.name = name;

            this.age = age;

        }

        @Override

        public String toString() {

            return "Person [name=" + name + ", age=" + age + "]";

        }

    }

    class Test4{

        public static void fun4() {

            IC ic = (name,age)->new Person(name, age);

            Object per = ic.show("bing", 19);

            System.out.println(per);

            //簡(jiǎn)化

            //構(gòu)造方法引用代替lambda表達(dá)式,函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳該構(gòu)造方法作為參數(shù)

            IC ic2 = Person::new;

            Object per1 = ic2.show("chen", 10);

            System.out.println(per1);

        }

    }

    ```

- 應(yīng)用

```java

String[] strings={"123","456","789","趙志陽(yáng)真帥"};

List<String> lists= Arrays.asList(strings);

lists.forEach((s)-> out.println("字符串是:"+s));

lists.forEach(out::println);

```

## 集合

```java

package collection;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.Objects;

class Person{

    private String name;

    private int age;

    public Person(String name, int age) {

        this.name = name;

        this.age = age;

    }

    @Override

    public boolean equals(Object o) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        return age == person.age &&

                Objects.equals(name, person.name);

    }

    public void setName(String name) {

        this.name = name;

    }

    public void setAge(int age) {

        this.age = age;

    }

    @Override

    public String toString() {

        return "Person{" +

                "name='" + name + '\'' +

                ", age=" + age +

                '}';

    }

}

public class Main {

    public static void main(String[] args) {

        ArrayList<Person> arrayList=new ArrayList<>();

        Person zs=new Person("張三",20);

        Person zs2=new Person("張三",20);//將放不進(jìn)去

        Person ls=new Person("李四",30);

        Person ww=new Person("王五",40);

        //contains判斷比較的是對(duì)象的equals方法。

        if(!arrayList.contains(zs)){

            arrayList.add(zs);

        }

        if(!arrayList.contains(zs2)){

            arrayList.add(zs2);

        }

        if(!arrayList.contains(ls)){

            arrayList.add(ls);

        }

        if(!arrayList.contains(ww)){

            arrayList.add(ww);

        }

        Iterator iterator=arrayList.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

    }

}

```

用hash相關(guān)的容器是,重寫equals hashcode

treeSet還要實(shí)現(xiàn)Comparable接口并重寫compareTo方法?;蛘咦远x比較器Comparator

```java

public class Demo9 {

    public static void main(String[] args) {

        //創(chuàng)建比較器對(duì)象

        ComStrWithLength comStrWithLength = new  ComStrWithLength();

        //將比較器對(duì)象交給TreeSet

        Set set = new TreeSet<>(comStrWithLength);

         /*

          * TreeSet的add方法實(shí)現(xiàn)的排序,去重.通過(guò)調(diào)用元素的compareTo方法

          * String類已經(jīng)實(shí)現(xiàn)了Comparable接口

          */

        set.add("java");

        set.add("hadoop");

        set.add("spark");

        set.add("HDFS");

        set.add("HDFS");

        set.add("Mapreduce");

        System.out.println(set);

    }

}

//創(chuàng)建一個(gè)比較器類

class ComStrWithLength implements Comparator{

    @Override

    public int compare(Object o1, Object o2) {

        //比較字符串的長(zhǎng)度

        if (!(o1 instanceof String)) {

            throw new ClassCastException("類型轉(zhuǎn)換錯(cuò)誤");

        }

        if (!(o2 instanceof String)) {

            throw new ClassCastException("類型轉(zhuǎn)換錯(cuò)誤");

        }

        //向下轉(zhuǎn)型

        String s1 = (String)o1;

        String s2 = (String)o2;

        //先按照長(zhǎng)度比

        int num = s1.length()-s2.length();

        //長(zhǎng)度相同,再按照字典順序比

        return num==0?s1.compareTo(s2):num;

    }

}

泛型

作用:

1. 使用了泛型不再需要進(jìn)行容錯(cuò)處理,向下轉(zhuǎn)型,強(qiáng)制類型轉(zhuǎn)換----簡(jiǎn)化代碼

2. 將運(yùn)行階段的問(wèn)題提前到編譯階段檢查,提高了代碼的安全性和編程效率

“Lambda表達(dá)式的說(shuō)明和實(shí)例用法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI