当前位置: 技术文章>> jdk8新特性-Lambda 表达式的语法

文章标题:jdk8新特性-Lambda 表达式的语法
  • 文章分类: 后端
  • 28619 阅读
  • Lambda 表达式是用来给 函数式接口 的变量或形参赋值使用的。

  • 本质上,Lambda 表达式是用于实现 函数式接口 的 抽象方法 。

  • 语法:
    (形参列表) -> {Lambda体}

  • 说明:

    • (形参列表):就是要赋值的函数式接口的抽象方法的 (形参列表) 。

    • {Lambda体}:就是实现这个抽象方法的方法体。

    • ->:Lambda操作符。

  • 优化:

    • 当 {Lambda体} 只有一条语句的时候,可以省略 {} 和 {;} 。

    • 当 {Lambda体} 只有一条语句的时候,并且这个语句还是 return 语句的时候,return 也可以省略,但是如果 {;} 没有省略,那么 return 是不可以省略的。

    • (形参列表) 的类型可以省略。

    • 当 (形参列表) 的形参个数只有一个,那么可以将数据类型和 () 一起省略,但是形参名不能省略。

    • 当 (形参列表) 是空参的时候,() 不能省略。

  • 示例:

package com.github.demo4;
import java.util.
function.IntBinaryOperator;
/** * @author maxiaoke.com * @version 1.0 *  */
public class Test {
    public static void main(String[] args) {
        useIntBinaryOperator(1, 2, (a, b) - >a + b);
    }
    public static void useIntBinaryOperator(int a, int b, IntBinaryOperator operator) {
        int result = operator.applyAsInt(a, b);
        System.out.println("result = " + result);
    }
}
  • 示例:

package com.github.demo5;
import java.util.Set;
import java.util.TreeSet;
/** * @author maxiaoke.com * @version 1.0 *  */
public class Test {
    public static void main(String[] args) {
        Set < Integer > set = new TreeSet < >((a, b) - >a - b);
        set.add(10);
        set.add(100);
        set.add( - 20);
        set.add(5);
        set.add(1);
        System.out.println("set = " + set); // set = [-20, 1, 5, 10, 100]    }}
  • 示例:

package com.github.demo6;
import java.util.Arrays;
import java.util.List;
import java.util.
function.Consumer;
import java.util.
function.Function;
import java.util.
function.Predicate;
import java.util.
function.Supplier;
/** * @author maxiaoke.com * @version 1.0 *  */
public class Test {
    public static void main(String[] args) {
        userConsumer("abc", s - >System.out.println(s));
        useSupplier(() - >String.valueOf(Math.random()));
        usePredicate(Arrays.asList("a", "b", "c"), (s) - >s.equals("a"));
        useFunction(1, (i) - >String.valueOf(i));
    }
    public static void userConsumer(String str, Consumer < String > consumer) {
        consumer.accept(str);
    }
    public static void useSupplier(Supplier < String > supplier) {
        String s = supplier.get();
        System.out.println(s);
    }
    public static void usePredicate(List < String > list, Predicate < String > predicate) {
        for (String s: list) {
            if (predicate.test(s)) {
                System.out.println(s);
            }
        }
    }
    public static void useFunction(Integer num, Function < Integer, String >
    function) {
        String apply = function.apply(num);
        System.out.println(apply);
    }
}


推荐文章