java8新特性,Lambda 表达式

简介: 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号可选的大括号:如果主体包含了一个语句,就不需要使用大括号可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值3.Lambda表达式的五种使用场景第一种场景:无参,无返回值类型


1.java8新特性


Java8 新增了非常多的特性,主要有以下几个:


Lambda 表达式:Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)


函数式接口:指的是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,这样的接口可以隐式转换为 Lambda 表达式


方法引用:方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码


默认方法:默认方法就是一个在接口里面有了一个实现的方法


Stream API:新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。


Optional 类:Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。


Date Time API:加强对日期与时间的处理。


Nashorn, JavaScript 引擎:Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用


2.Lambda 表达式简介


Lambda 表达式,也称为闭包,是 Java 8 中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理,函数式开发者非常熟悉这些概念。


很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持 Lambda 表达式,但是 Java 开发者没有选择,只能使用匿名内部类代替Lambda表达式。


表达式语法:


(parameters) -> expression 
(parameters) ->{ statements; } 


Lambda 编程风格,可以总结为四类:


可选类型声明:不需要声明参数类型,编译器可以统一识别参数值

可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号

可选的大括号:如果主体包含了一个语句,就不需要使用大括号

可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值


3.Lambda表达式的五种使用场景


第一种场景:无参,无返回值类型


/**
 * Lambda表达式快捷开启线程
 * 第一种:无参,无返回值类型
 */
@Test
public void test1() {
    Runnable runnable = () -> System.out.println("我爱中国!");
    runnable.run();
}


第二种场景:需要参数,但是没有返回值


/**
  * 需要参数,但是没有返回值
  */
 @Test
 public void test2() {
     Consumer<String> con = (String s) -> {
         System.out.println("s=" + s);
     };
     con.accept("dahe");
 }


场景三:类型推断


/**
 * 类型推断
 * 数据类型可以进行省略操作,可以由编译器进行类型推断
 */
@Test
public void test3() {
    Consumer<String> con = (s) -> {
        System.out.println("s=" + s);
    };
    con.accept("dahe");
}


场景四:数列表只有一个参数,可以省略括号


@Test
public void test4() {
    Consumer<String> con = s -> {
        System.out.println("s=" + s);
    };
    con.accept("dahe");
}


场景五:参数列表有多个参数,并且可以有返回值


/**
 * 参数列表有多个参数,并且可以有返回值
 */
@Test
public void test5() {
    Comparator<Integer> comparator = (o1, o2) -> {
        System.out.println(o1);
        System.out.println(o2);
        return o1.compareTo(o2);
    };
    System.out.println(comparator.compare(521, 1314));


4.函数式接口


Lambda 的设计者们为了让现有的功能与 Lambda 表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念。


函数接口指的是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,这样的接口可以隐式转换为 Lambda 表达式。


但是在实践中,函数式接口非常脆弱,只要某个开发者在该接口中添加一个函数,则该接口就不再是函数式接口进而导致编译失败。为了克服这种代码层面的脆弱性,并显式说明某个接口是函数式接口,Java 8 提供了一个特殊的注解@FunctionalInterface


Lambda表达式的本质:作为函数式接口的实现🎈


以下是一个函数式接口的案例:


@FunctionalInterface 
public interface GreetingService { 
    void sayMessage(String message); 
}


5.java内置的四大函数式接口



函数式接口案例:


import org.junit.jupiter.api.Test;
import java.util.function.Consumer;
/**
 * java内置的函数式接口
 */
public class FunctionalInterface {
    /**
     * 体验Consumer接口
     */
    @Test
    public void test1() {
        happyTime(600, money -> System.out.println("给我钱" + money));
    }
    public void happyTime(double money, Consumer<Double> con) {
        con.accept(money);
    }
}


目录
相关文章
|
2月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
Java API 开发者
64 0
|
3月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
3月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
371 211
|
3月前
|
安全 Java
Java中的Switch表达式:更简洁的多路分支
Java中的Switch表达式:更简洁的多路分支
458 211
|
3月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
|
4月前
|
设计模式 数据采集 Java
Java正则表达式的基础知识,进阶至熟练掌握。
通过大量的练习来熟悉它们的识别模式、如何设计模式来解决实际问题,才能够逐步达到熟练掌握。更多的是通过实践、编写代码和解决真实问题来完善技能。在这方面,没有快速的捷径,唯有刻意练习和长时间的代码实践。
89 0
|
4月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
171 1
|
11月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。