一、Lamdba 表达式与函数式接口

这篇具有很好参考价值的文章主要介绍了一、Lamdba 表达式与函数式接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Lamdba 表达式与函数式接口

1.1 Lamdba 表达式与函数式接口

1.1.1 Lambda 表达式概述

  • Lambda 表达式是 Java 8 引入的一个新特性
  • Lambda 表达式可以被视为匿名函数
  • 允许在需要函数的地方以更简洁的方法定义功能
  • Lambda 表达式可以完成简洁的函数定义
  • Stream API 中大量使用了 Lambda 表达式,可以使用 Lambda 表达式对集合进行操作
  • Lambda 表达式允许你将函数作为参数传递传递给其它函数,或将函数组合在一起形成新的函数

1.1.2 使用 Lambda 表达式实现接口

  • 首先定义一个接口
interface MyInterface {
    int sum(int x,int y);
}
public class Main {
    public static void main(String[] args) {

    }
}
  • 使用 Lambda 表达式实现接口
interface MyInterface {
    int sum(int x,int y);
}
public class Main {
    public static void main(String[] args) {
        MyInterface myInterface = (int x,int y) ->{
            return x+y;
        };
        System.out.println(myInterface.sum(1, 2));
    }
}

1.1.3 函数式接口概述

  • 接口中只有一个未实现的方法,被称为函数式接口
  • 只要是函数式接口,就可以使用 Lambda 表达式
  • 在 Java 中可以使用 @FunctionalInterface 来表示函数式接口

1.1.4 Lambda 表达式简写形式

1、参数类型可以不写,只写参数名

 MyInterface myInterface = (x,y) ->{
            return x+y;
        };

2、参数变量名也可以随意定义,但是参数数量一定要一致

 MyInterface myInterface = (i,j) ->{
            return x+y;
        };

3、如果只有一个参数,可以不写小括号,但没有参数一定要写小括号

 MyInterface myInterface1 = i ->{
            return i;
};
 MyInterface myInterface2 = () ->{
            return 1;
};

4、方法体如果只有一句话,可以省略 {}

 MyInterface myInterface = i -> return i;

1.2 Function PAI 函数式接口

1.2.1 Function 函数式接口概述

  • Function API 是 Java 函数式接口的底层定义
  • Function API 包括了许多不同种类类型的函数式接口
  • 以支持各种函数式编程风格和操作

1.2.2 Function API 不同类型的函数式接口

以下是 Function API 内置的函数式接口

一、Lamdba 表达式与函数式接口,Lambda,java

  • 其中标红的四个接口 Consumer、Function、Perdicate、Supplier 是四个常见的函数式接口
  • 它们四个代表了函数式编程中的不同类型
    • Consumer 接口 表示接受一个参数并无返回值操作,被称为消费者
    • Function 接口 表示接受一个参数并返回一个结果的函数,通常被视为常用的函数接口
    • Perdicate 接口表示接受一个参数并返回一个布尔值,被称为断言
    • Supplier 接口表示无参数并返回一个结果,并成为提供者

1.2.3 使用 Function 不同类型的接口完成小案例

小案例

1.使用 Supplier 生成一个字符串数据

2.使用 Predicate 验证输入字符串是否为数字

3.使用 Function 转换数据,将字符串转为数字

4.使用 Consumer 判断数字是奇数还是偶数

5.将上面一系列操作串联起来

每个函数式接口当中都有一个方法,需要调用,如果不清楚方法名,可找到这个接口自行查看

1、使用 Supplier 生成一个字符串数据

package org.example;

import java.util.function.Supplier;

public class FunctionDemo {
    public static void main(String[] args) {
        //生成一个字符串数据
        Supplier<String> supplier=() -> "42";
        System.out.println(supplier.get());
    }
}

2、使用 Predicate 验证输入字符串是否为数字

package org.example;

import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionDemo {
    public static void main(String[] args) {
        //验证输入字符串是否为数字
        Predicate<String> predicate=str -> str.matches("-?\\d+(\\.\\d+)?");
        System.out.println(predicate.test("435"));
        System.out.println(predicate.test("435a"));
    }
}

3、转换数据,将字符串转为数字

package org.example;

import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionDemo {
    public static void main(String[] args) {
        //转换数据,将字符串转为数字
        Function<String,Integer> function= Integer::parseInt;
        Integer num = function.apply("435");
        System.out.println(num);
    }
}

4、判断数字是奇数还是偶数

package org.example;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionDemo {
    public static void main(String[] args) {
        //判断数字是奇数还是偶数
        Consumer<Integer> consumer=integer -> {
          if (integer %2 == 0){
              System.out.println("偶数"+integer);
          }else {
              System.out.println("奇数"+integer);
          }
        };
        consumer.accept(44);
    }
}

5、将这些操作串联起来,实现判断 Supplier 生成的字符串是奇数还是偶数

package org.example;

import java.util.Scanner;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionDemo {
    public static void main(String[] args) {
        //生成一个字符串数据
        Supplier<String> supplier=() -> "42";
        //验证输入字符串是否为数字
        Predicate<String> predicate=str -> str.matches("-?\\d+(\\.\\d+)?");
        //转换数据,将字符串转为数字
        Function<String,Integer> function= Integer::parseInt;
        //判断数字是奇数还是偶数
        Consumer<Integer> consumer=integer -> {
          if (integer %2 == 0){
              System.out.println("偶数"+integer);
          }else {
              System.out.println("奇数"+integer);
          }
        };

        //将这些操作串联起来,实现判断 Supplier  生成的字符串是奇数还是偶数
        if(predicate.test(supplier.get())){
            consumer.accept(function.apply(supplier.get()));
        }else {
            System.out.println("非法数字");
        }
    }
}

6、也可以将他们全部组合成一个方法

package org.example;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionMethod {
    public static void main(String[] args) {
        myMethod(() -> "4aaa",
                str -> str.matches("-?\\d+(\\.\\d+)?"),
                Integer::parseInt,
                integer -> {
                    if (integer %2 == 0){
                        System.out.println("偶数"+integer);
                    }else {
                        System.out.println("奇数"+integer);
                    }
                });
    }
    private static void myMethod(
            Supplier<String> supplier,
            Predicate<String> predicate,
            Function<String,Integer> function,
            Consumer<Integer> consumer
    ){
        if(predicate.test(supplier.get())){
            consumer.accept(function.apply(supplier.get()));
        }else {
            System.out.println("非法数字");
        }
    }
}

       Function<String,Integer> function,
        Consumer<Integer> consumer
){
    if(predicate.test(supplier.get())){
        consumer.accept(function.apply(supplier.get()));
    }else {
        System.out.println("非法数字");
    }
}

}文章来源地址https://www.toymoban.com/news/detail-823575.html


到了这里,关于一、Lamdba 表达式与函数式接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java8函数式编程(Lambda表达式)

    Lambda 表达式是一个匿名方法,将行为像数据一样进行传递。 Lambda 表达式的常见结构:BinaryOperatorInteger add = (x, y) → x + y。 函数接口指仅具有单个抽象方法的接口,用来表示 Lambda 表达式的类型。 Stream 是用函数式编程方式在集合类上进行复杂操作的工具。 这行代码并未做什

    2024年02月16日
    浏览(44)
  • JDK1.8新特性(部分)【Lambda表达式、函数式接口】--学习JavaEE的day41

    day41 JDK1.8新特性简介 速度更快 - 优化底层源码,比如HashMap、ConcurrentHashMap 代码更少 - 添加新的语法Lambda表达式 强大的Stream API 便于并行 最大化减少空指针异常 - Optional Lambda表达式 简介 Lambda是一个匿名函数(方法), 允许把函数作为一个方法的参数 。利用Lambda表达式可以写出

    2024年04月25日
    浏览(36)
  • Android kotlin高阶函数与Java lambda表达式介绍与实战

            目前在Java JDK版本的不断升高,新的表达式已开始出现,但是在Android混淆开发中,kotlin的语言与Java的语言是紧密贴合的。所以Java lambda表达式在kotlin中以新的身份出现:高阶函数与lambda表达式特别类似。接下来我讲会先讲Java的lambda,再介绍kotlin的高阶函数。 2.1

    2024年02月15日
    浏览(50)
  • Java 8及以上新特性:Lambda表达式、Stream API、Optional类与接口默认方法(四)

    目录 一、接口默认方法 1.1 概念解析: 1.2 应用场景: 1.3 使用注意事项: 1.4 使用示例: 二、结论 1.1 总结Java 8及以上版本四大新特性的重要意义与价值: 1.2 鼓励读者积极学习并运用这些新特性: 1.3 对未来Java版本可能引入的新特性进行展望: 1.1 概念解析: 接口默认方法

    2024年04月13日
    浏览(43)
  • 探索Python中的函数式编程:Lambda表达式与函数式工具【第135篇—Lambda表达式】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Python编程世界中,函数式编程逐渐成为了一种流行的范式,特别是在处理数据和编写简洁、高效代码时。函数式编程的核心思想是将计算视

    2024年04月08日
    浏览(87)
  • java学习路程之篇三、进阶知识、面向对象高级、接口新特性、代码块、内部类、Lambda表达式、窗体、组件、事件

    概述 生成值类型响应式数据 通过 .value 值修改 生成对象和数组类型的响应式对象选用 reactive 方式比较好 html JavaScript 概述 reactive 方法根据传入的对象,创建返回一个深度响应式对象。响应式对象看起来和传入的对象一样。但是,响应式对象属性值改动,不管层级有多深,都

    2024年02月16日
    浏览(38)
  • 【C++】STL 算法 ② ( foreach 循环中传入 函数对象 / Lambda 表达式处理元素 | foreach 循环算法 | Lambda 表达式 - 匿名 函数对象 / 仿函数 )

    在 C++ 语言中 , std::foreach 循环 虽然 不是标准库的一部分 , 但是 C ++ 编译器 提供了对 该语法 的支持作为扩展 ; 使用 该 std::foreach 循环 , 可以用于 遍历 STL 标准模板库 中提供的容器 , 如 vector 单端数组 , list 双向链表 , map 映射 , set 集合 等 容器 中的元素 ; std::for_each 是一个算

    2024年02月02日
    浏览(66)
  • C++的lambda表达式(匿名函数)

    从C++11开始,C++也支持使用lambda表达式(匿名函数)。Lambda表达式是一种便捷的方式,可以定义一个函数对象,而无需使用显式的函数对象类型或函数指针语法。 C++中的 lambda表达式的基本语法如下: 其中各个部分的含义如下: capture list :用于指定所捕获的外部变量列表。可

    2024年02月08日
    浏览(47)
  • 进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则

    目录         1.0 什么是 Lambda 表达式?         1.1 既然跟匿名内部类相关,先来回顾匿名内部类。          1.2 Lambda 表达式与匿名内部类之间的关系。         1.3 函数式接口         1.4 在具体代码中来操作一下         2.0 Lambda 表达式省略规则          Lambda 表达

    2024年02月08日
    浏览(55)
  • C++ lambda表达式函数递归调用简单写法实现

    在C++11中,lambda表达式函数递归往往会带上 functional 头文件。书写形式如下: 还有相对简单点的第二种写法(C++14): 对于第二种, auto fib 的作用是为了在 lambda 表达式内部能够递归调用自身。在 C++14 中,lambda 表达式默认是无法直接递归调用的,因为在 lambda 内部无法访问到

    2024年02月15日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包