Java8新特性系列(Lambda)

作者: 史培培 | 来源:发表于2017-12-24 22:22 被阅读0次
题图:by pixel2013 From pixabay

上期我们分析了Java8中Interface的相关新特性,其中包括函数式接口,可以在调用时,使用一个Lambda表达式作为参数,那么我们就来谈谈Java8中的Lambda表达式吧。

定义

Lambda表达式基于函数式接口实现,故可以认为Lambda表达式是对函数式接口的匿名内部类的一种简写形式。

格式

Lambda表达式的具体形式为:()->{}

箭头表达式->将Lambda表达式分为了左右两部分,左侧为参数列表,右侧为具体实现,即Lambda体。

具体有以下以及情形:

1. 无参数无返回值

Runnable runnable = () -> {
    System.out.println("run");
};

2. 有一个参数无返回值

public interface MyInterface {
    void test(int x);
}

MyInterface i = (x) -> System.out.println(x);

3. 只要一个参数,小括号可以不写

MyInterface i = x -> System.out.println(x);

4. 有多个参数有返回值,并且Lambda体有多条语句

Comparator<Integer> comparator = (x, y) -> {
    System.out.println("Comparator");
    return Integer.compare(x, y);
};

5. Lambda体中只有一条语句,return和{}可以省略

Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);

6. Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”

Comparator<Integer> comparator = (Integer x, Intergery) -> Integer.compare(x, y);
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);

总结:

  • 参数类型可忽略,若写所有参数都要写,若不写,可以类型推断
  • 参数有且仅有一个时,()可以省略
  • Lambda体只有一条语句,return{}都可忽略

Java8内置四大核心函数式接口(java.util.function.*包)

  • Consumer<T> 消费型接口
public static void main(String[] args) {
    String str = "str";
    consumer(str, s -> System.out.println(s));
}

public static void consumer(String str, Consumer<String> function) {
    function.accept(str);
}
  • Supplier<T> 供给型接口
public static void main(String[] args) {
    supplier(() -> "str");
}

public static String supplier(Supplier<String> function) {
    return function.get();
}
  • Function<T, R> 函数型接口
public static void main(String[] args) {
    String str = "str";
    function(str, s -> s);
}
    
public static String function(String str, Function<String, String> function) {
    return function.apply(str);
}
  • Predicate<T> 断定型接口
public static void main(String[] args) {
    String str = "str";
    predicate(str, s -> s.isEmpty());
}

public static boolean predicate(String str, Predicate<String> function) {
    return function.test(str);
}

Lambda表达式就到这里了,一开始用起来会不习惯,用多了上手起来就熟练了,而且越用越信手拈来。

下期我们将分析用引用方式简写Lambda表达式,敬请期待。

相关文章

  • Lambda 表达式

    Lambda 表达式 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Lambda 表达式,...

  • Java 8、9 语言新特性

    Java语言新特性 Java8 Java 8 新特性 Lambda 表达式 Lambda表达式(也叫做闭包)是Ja...

  • Java8 新增了非常多的特性

    新特性Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为...

  • java8

    现代化 Java - Java8 指南 JAVA8新特性(吐血整理) 理解 Lambda 表达式

  • Java8特性之Lambda、方法引用和Streams

    Java8特性之Lambda、方法引用和Streams Java8已经推出了好一段时间了,而掌握Java8的新特性...

  • java8 新特性

    java8 新特性 1 Lambda表达式 lambda 是一个匿名函数, lambda 表达式基本语法: jav...

  • Java8新特性系列(Lambda)

    上期我们分析了Java8中Interface的相关新特性,其中包括函数式接口,可以在调用时,使用一个Lambda表...

  • Java8常用的新特性总结

    一、Java8常用的新特性总结 1.1.Java8常用特性总览 1.2.lambda表达式 在Java8中引入了一...

  • Lambda的基础使用

    Lambda是java8出的新特性,之前很少用Lambda表达式写代码,现在慢慢习惯用Lambda表达式,并且记得...

  • parallelStream使用不当引发的血案

    Stream简洁 众所周知,java8的新特性中出了lambda表达式之外最受人关注的还有stream一系列的ap...

网友评论

    本文标题:Java8新特性系列(Lambda)

    本文链接:https://www.haomeiwen.com/subject/sickgxtx.html