广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中Lambda表达式和函数式接口的使用和特性
  • 675
分享到

Java中Lambda表达式和函数式接口的使用和特性

Python 官方文档:入门教程 => 点击学习

摘要

目录1.概述2.lambda表达式的基础3.JAVA中的lambda表达式4.函数式接口概述FunctionPredicateConsumerSuppiler5.级联与柯里化1.概述

1.概述

当Java 8发布时,其中最令人兴奋的特性之一就是 Lambda 表达式。Lambda 表达式是一种轻量级、简洁和高效的函数式编程方法。它可以用来代替 Java 旧有的匿名内部类,提高代码的可读性和可维护性。

2.lambda表达式的基础

Lambda 表达式是一个匿名函数,由输入参数和处理逻辑两部分组成:

(parameter1, parameter2, ...) -> { code block }

输入或者输出可以为空:

() -> System.out.println("Hello, world!")
(a) -> {}
() -> {}

多参数用括号,单参数可以不用括号:

(a,b) -> a+b
a -> System.out.print(a)

多条处理逻辑用花括号,单条处理逻辑可以不用花括号:

(a,b) -> a+b;
(a,b) -> {a+b;a-b;}

3.JAVA中的lambda表达式

要在 Java 中使用 Lambda 表达式,需要将它们赋值给一个函数式接口变量。函数式接口是只包含一个抽象方法的接口,它们提供了一种定义 Lambda 表达式类型的方式。例如,下面的函数式接口 MyInterface 包含了一个抽象方法 doSomething

interface MyInterface {
    void doSomething();
}

要使用 Lambda 表达式实现这个接口,只需要提供一个与 doSomething 方法签名匹配的 Lambda 表达式即可。例如,下面的代码使用 Lambda 表达式创建了一个 MyInterface 对象,并调用了它的 doSomething 方法:

MyInterface myLambda = () -> System.out.println("Hello, world!");
myLambda.doSomething();

在这个例子中,我们使用 Lambda 表达式创建了一个 MyInterface 对象,并将它赋值给了 myLambda 变量。然后,我们调用了 myLambda.doSomething() 方法,输出了 Hello, world!

4.函数式接口

内置函数式接口

概述

jdk8内置实现了一些常用的函数式接口:

接口作用
Function程序中映射逻辑的抽象
Predicate程序中判断逻辑的抽象
Consumer程序中的消费型逻辑的抽象
Suppiler程序中的生产逻辑的抽象

Function

Function接口,可以定义入参和出参的类型,可用于类型转换。

代码示例:

Function<String,Integer> function=(String i)-> Integer.parseInt(i);
System.out.println(function.apply("1")==1);

Predicate

Predicate接口,指定返回值为布尔类型,可用于断言。

public static void main(String[] args) {
        Predicate<String> predicate = (s) -> s.length() > 0;
        // 测试字符串的长度是否>0
        System.out.println(predicate.test("hello"));
        // 结果取反
        System.out.println(predicate.negate().test("hello"));
        System.out.println("=====or / and======");
        System.out.println(predicate.test(""));
        // 增加或判断,二者满足其一则为true
        System.out.println(predicate.or(s -> s.equals("")).test(""));
        // 增加与判断,二者都满足则为true
        System.out.println(predicate.and(s -> s.equals("hello")).test(""));
        System.out.println(predicate.and(s -> s.equals("hello")).test("hello"));
        System.out.println("=====isEqual======");
        // 判断是否相等
        System.out.println(Predicate.isEqual("hello").test(""));
        System.out.println(Predicate.isEqual("hello").test("hello"));
        Predicate<Boolean> nonNull = Objects::nonNull;
        Predicate<Boolean> isNull = Objects::isNull;
        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isNotEmpty = isEmpty.negate();
    }

Consumer

Consumer接口,又叫消费接口,没有返回值,就像把输入消费掉了一样。

public static void main(String[] args) {
   Consumer<Object> consumer1 = new Consumer<Object>() {
   @Override
   public void accept(Object o) {
     System.out.println("这次消费了:" + o.toString());
     }
   };
   consumer1.accept("100w元在双十一!这下穷死了!");
   Consumer<String> consumer2 = s -> System.out.println("这次消费了:" + s);
   consumer2.accept("120w元在双十二!又穷死了!");
}

Suppiler

Suppiler接口,又叫生产接口,可以自定义返回值,用来生产一些东西。

public static void main(String[] args) {
    // 生成一个字符串
    Supplier<String> supplier1 = () -> "abcde";
    // 生成一个随机数
    Supplier<Integer> supplier2 = () -> new Random().nextInt(10);
    // 产生一个运行时异常
    Supplier<RuntimeException> supplier3 = () -> new RuntimeException();
    System.out.println(supplier1.get());
    System.out.println(supplier2.get().intValue());
    System.out.println(supplier3.get());
}

5.级联与柯里化

级联表达式,含有多个箭头的lambda表达式,即“套娃”lambda表达式。

以下列lambda表达式为例:

x->y->x+y

假设输入的为Integer类型,

用Function接口来表达即为:

输入一个Integer x,返回一个Integer y,

Integer y又可以用Function接口来表示为:

输入一个Integer,返回一个Integer

Function<Integer,Function<Integer,Integer>> functionFunction= x->y->x+y;
System.out.println(functionFunction.apply(2).apply(3));

到此这篇关于Java中Lambda表达式和函数式接口的使用和特性的文章就介绍到这了,更多相关Java lambda表达式与函数式接口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中Lambda表达式和函数式接口的使用和特性

本文链接: https://www.lsjlt.com/news/210524.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java特性 Lambda 表达式和函数式接口
    目录Java Lambda表达式起源&概念语法简单例子Lambda简化Runnable例子代码分析自定义接口实现lambda函数式接口概念备注格式@FunctionalInt...
    99+
    2022-11-13
  • Java中Lambda表达式和函数式接口的使用和特性
    目录1.概述2.lambda表达式的基础3.JAVA中的lambda表达式4.函数式接口概述FunctionPredicateConsumerSuppiler5.级联与柯里化1.概述...
    99+
    2023-05-16
    Java lambda表达式与函数式接口 Java lambda表达式 Java函数式接口
  • Java8中函数式接口与Lambda表达式的特性
    今天就跟大家聊聊有关Java8中函数式接口与Lambda表达式的特性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是Lambda表达式,java8为什么使用Lambda表达式?“...
    99+
    2023-05-31
    java8 函数式接口 lambda
  • Java Lambda表达式常用的函数式接口
    目录Supplier接口Consumer接口Predicate接口Function接口BiFunction接口基本数据类型Supplier相关的接口Consumer相关的接口Pred...
    99+
    2022-11-13
  • JAVA中Lambda表达式与函数式接口怎么用
    这篇文章主要为大家展示了“JAVA中Lambda表达式与函数式接口怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA中Lambda表达式与函数式接口怎么用”这篇文章吧。Lambda表达...
    99+
    2023-06-29
  • 详解Java函数式编程和lambda表达式
    目录为什么要使用函数式编程JDK8接口新特性函数接口方法引用类型推断变量引用级联表达式和柯里化为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论。函数式与命令...
    99+
    2022-11-12
  • Java中使用Lambda表达式和函数编程示例
    目录1、简单介绍 2、Lambdas和Scopes3、Lambdas与局部变量4、Lambda体与局部变量5、Lambdas和'This'和'Super'关键字6、Lambdas和E...
    99+
    2022-11-12
  • Java8新特性的lambda,函数式接口,StreamingAPI
    Lambda表达式是对匿名内部类对象的一种格式的简化Java8中引入了一个新的运算符"->",称为箭头运算符,或者lambda运算符作用就是分割前后两部分的左边:表示的是Lambda表达式的参数列表(接口中,定义的抽象方法的参数)右边:表示...
    99+
    2017-12-03
    java教程 Java8
  • 深入理解Java8新特性之Lambda表达式的基本语法和自定义函数式接口
    1.写在前面 目前我们学习Java主要用到的应该就是Java8了,或者说大部分企业当前使用的也是Java8。那么既然Java8的应用如此之广泛,一定有一些亮点所在: Lam...
    99+
    2022-11-12
  • Java8中Lambda表达式与函数式接口的示例分析
    这篇文章将为大家详细讲解有关Java8中Lambda表达式与函数式接口的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java8被称作Java史上变化最大的一个版本。其中包含很多重要的新特性,最核...
    99+
    2023-05-30
    java lambda
  • Java接口中Lambda表达式匹配的方法
    小编给大家分享一下Java接口中Lambda表达式匹配的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java基本数据类型有哪些Java的基本数据类型分为:1...
    99+
    2023-06-14
  • Java8新特性之Lambda表达式的使用
    目录1. lambda表达式介绍2. lambda表达式的重要特征3. lambda表达式对域外变量的限制4. lambda表达式的优缺点5. lambda表达式的使用场景1. la...
    99+
    2022-11-12
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2022-11-12
  • Java中forEach使用lambda表达式,数组和集合的区别说明
    1.数组怎么使用lambda 数组不能直接在forEach中使用lambda表达式 PartnerType[] values = PartnerType.values(); //...
    99+
    2022-11-12
  • Java中Lambda表达式的使用详细教程
    目录简介格式实例函数式接口lambda作为参数遍历集合创建线程排序简介 说明 本文用示例展示Lambda表达式的用法。同时也会介绍Lambda的相关知识。 Lambda表达式介绍 L...
    99+
    2022-11-13
  • 一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
    目录函数式接口概述函数式接口示例1、Runnable接口 2、自定义函数式接口3、作为参数传递 Lambda 表达式内置函数式接口Lambda简述Lambda语法方法引用构造器引用数...
    99+
    2022-11-12
  • 使用Java 8中的Lambda表达式实现工厂模式
    前言工厂模式是面向对象设计模式中大家最为熟知的设计模式之一。传统的实现方式大家都在熟悉不过了,今天将向大家介绍使用Java8 Lambda 表达式更加优雅的实现工厂模式。封面工厂模式在java中最常用的设计模式之一,它提供了一种很好的实例化...
    99+
    2023-05-31
    java8 lambda表达式 工厂模式
  • Kotlin中Lambda表达式与高阶函数使用分析讲解
    目录Lambda表达式高阶函数小结编程语言的发展,通过需求,不断的变化出新的特性,而这些特性就会使得编程变得更加的简洁。 Lambda表达式 Lambda表达式的出现,一定程度上使得...
    99+
    2022-12-08
    Kotlin Lambda表达式 Kotlin高阶函数
  • JavaScript中Generator函数和yield表达式怎么使用
    这篇“JavaScript中Generator函数和yield表达式怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“J...
    99+
    2023-07-04
  • C++11中的可变参数模板和lambda表达式怎么使用
    本篇内容介绍了“C++11中的可变参数模板和lambda表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.可变参数模板C++1...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作