Lambda表达式

Posted roadlandscape

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lambda表达式相关的知识,希望对你有一定的参考价值。

package com.fgy.demo08;

/**
* 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
* 使用Lambda必须具有上下文推断
*   也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例
* 有且仅有一个抽象方法的接口,称为“函数式接口”
*/
public class LambdaTest { public static void main(String[] args) { // 使用匿名内部类的方式实现多线程 new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "创建新线程"); } }).start(); // 使用Lambda表达式 new Thread(() -> { System.out.println(Thread.currentThread().getName() + "创建新线程"); }).start(); } }
package com.fgy.demo08;

public interface Cook {
    public abstract void makeCook();
}



package com.fgy.demo08;

/**
 * Lambda表达式:是可推导,可以省略的
 * 凡是可以根据上下文推导出的内容都可省略
 * 可以省略的内容:
 *         1.(参数列表):括号中的参数类型可以省略
 *         2.(参数列表):如果参数只要一个,那么括号和参数类型都可以省略
 *         3.{一些代码}:如果{}中只有一行代码,无论是否有返回值,{}、return和分号都可以省略
 *              注意:{}、return和分号必须一起省略
 */
public class CookTest {
    public static void main(String[] args) {
        /*invokeCook(() -> {
            System.out.println("吃饭了");
        });*/

        invokeCook(() -> System.out.println("吃饭了"));
    }

    private static void invokeCook(Cook cook) {
        cook.makeCook();
    }
}
package com.fgy.demo08;

public class Person {
    private String name;
    private Integer age;

    public Person() {
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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



package com.fgy.demo08;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class PersonTest {
    public static void main(String[] args) {
        Person[] persons = {
                new Person("lily", 28),
                new Person("sily", 19),
                new Person("jomn", 25),
        };

        /*Arrays.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        });*/

        // 使用Lambda表达式
        /*Arrays.sort(persons, (Person o1, Person o2) -> {
            return o1.getAge() - o2.getAge();
        });*/

        // Lambda表达式省略格式
        Arrays.sort(persons, (o1, o2) -> o1.getAge() - o2.getAge());

        for (Person person : persons) {
            System.out.println(person);
        }
    }
}

以上是关于Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA由一个将JSONArray转成Map的需求引发的lambda语法的学习

函数式编程

C# fun

Lambda表达式

Lambda表达式

Lambda表达式