一、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 内置的函数式接口

image-20240123200328203

  • 其中标红的四个接口 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("非法数字");
    }
}

}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/345762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Optional的使用(代替if判断是否为空)

Optional 前言 我的使用 package yimeng;import com.ruoyi.RuoYiApplication; import com.ruoyi.common.core.domain.entity.SysUser; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.*;SpringBootTes…

常用电子器件学习——三极管

三极管介绍 三极管&#xff0c;全称应为半导体三极管&#xff0c;也称双极型晶体管、晶体三极管&#xff0c;是一种电流控制电流的半导体器件其作用是把微弱信号放大成幅度值较大的电信号&#xff0c; 也用作无触点开关。晶体三极管&#xff0c;是半导体基本元器件之一&#xf…

专业140+总分420+复旦大学957信号与系统考研经验复旦电子信息与通信

今年专业957信号与系统140&#xff0c;数二140&#xff0c;总分420&#xff0c;顺利上岸复旦大学&#xff0c;回顾这一年的复习&#xff0c;有起有落&#xff0c;也有过犹豫和放弃&#xff0c;好在都坚持下来了&#xff0c;希望大家考研复习要不忘初心&#xff0c;困难肯定是很…

explain工具优化mysql需要达到什么级别?

explain工具优化mysql需要达到什么级别&#xff1f; 一、explain工具是什么&#xff1f;二、explain查询后各字段的含义三、explain查询后type字段有哪些类型&#xff1f;四、type类型需要优化到哪个阶段&#xff1f; 一、explain工具是什么&#xff1f; explain是什么&#x…

未来已来:AI引领智能时代的多领域巨变

大家好&#xff0c;今天我们将深入探讨人工智能如何彻底改变我们的生活方式&#xff0c;领略未来的无限可能性。 1. 医疗革新&#xff1a;AI担任超级医生 医疗领域是AI最引人注目的战场之一。智能医学影像诊断系统&#xff0c;不仅能够精准识别病变&#xff0c;还能辅助医生提…

Springboot+vue的科研工作量管理系统的设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的科研工作量管理系统的设计与实现&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的科研工作量管理系统的设计与实现…

浅谈大数据智能化技术在多个领域的应用实践

摘要 大数据智能化技术在当今信息社会中得到了广泛的应用。从金融、互联网电商、视频行业到垂直短视频领域&#xff0c;从工业互联网到云计算、边缘计算等领域&#xff0c;大数据智能化技术已经成为了企业竞争力的重要组成部分。技术实践、架构设计、指标体系、数据质量、数据分…

历经15年,比特币以强势姿态进军华尔街!270亿美元投资狂潮引发市场震荡!

本月&#xff0c;比特币庆祝了它的15岁生日&#xff0c;并以强势的姿态进军华尔街。最近美国交易所开始交易的比特币交易所交易基金&#xff08;ETF&#xff09;&#xff0c;已经获得了投资者的广泛接受。这一进展标志着比特币作为一种年轻资产迈向成熟的重要里程碑。 根据Glas…

损失函数是指什么

损失函数&#xff08;Loss Function&#xff09;是用来衡量模型预测输出与实际目标之间差异的函数。在机器学习和深度学习中&#xff0c;损失函数是模型训练的关键部分。其目标是通过最小化损失函数来使模型的预测尽可能接近实际的标签或目标值。 在监督学习中&#xff0c;模型…

JavaEE-SSM-订单管理-前端增删改功能实现

3.5 功能2&#xff1a;添加 从列表页面切换到添加页面 编写对应添加页面的路由 * {path: /orderAdd,name: 添加订单,component: () > import(../views/OrderAdd.vue)}编写添加功能 <template><div><table border"1"><tr><td>编…

mysql临时表简述

概述 业务中经常会对一些表进行聚合组装信息&#xff0c;然后筛选&#xff0c;有些表比较数据量大的时候&#xff0c;会对拖慢查询&#xff1b; 常用的mybatis的分页查询&#xff0c;在查询时会先count一下所有数据&#xff0c;然后再limit分页&#xff0c;即使分页也会有深度…

数美滑块协议解析2024/01/24

文章目录 网址分析请求定位代码看算法扣代码传参和轨迹暗坑网址 aHR0cHM6Ly93d3cuaXNodW1laS5jb20vbmV3L3Byb2R1Y3QvdHcvY29kZQ==分析请求 我比较简单,我直接过一下滑块然后看一下请求栈,是一堆混淆后的代码,直接全部拿下来,简单做一下解混淆,方便自己看,不会解混淆的也…

.kann勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 随着网络犯罪日益猖獗&#xff0c;恶意软件攻击也呈现多样化趋势。.kann勒索病毒是一种采用高级加密技术的勒索软件&#xff0c;它能够使用户的个人文件和企业数据变得无法访问。本文91数据恢复将介绍.kann勒索病毒的特点、数据恢复方法以及预防策略。如果您…

Onvif协议1:gSOAP是什么

目录 1.简介 2. Web Services 2.1 Web Services常用的几种框架 3. SOAP简介 3.1如此理解SOAP 4. WSDL文档 5. gsoap编译 5.1 gSOAP工具转换原理 1.简介 gSOAP工具基于编译器技术为C/C提供自动的SOAP和XML数据绑定。该工具使用自动生成代码以及先进的映射方法&#xff…

springboot118共享汽车管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的共享汽车管理系统 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获…

如何在Linux上部署Docker容器

一、什么是docker&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不…

Vue+Element(el-upload+el-form的使用)+springboot

目录 1、编写模板 2、发请求调接口 3、后端返回数据 1.编写实体类 2.Controller类 3、interface接口&#xff08;Service层接口&#xff09; 4.Service&#xff08;接口实现&#xff09; 5、interface接口&#xff08;Mapper层接口&#xff09; 6、xml 4、upload相关参…

别不信❗️你离数据专家只差一个CDMP证书

1⃣️为什么选择CDMP证书&#xff1f; &#x1f31f;&#x1f31f;亲爱的朋友们&#xff0c;如果你在寻找一个能让你在数据管理领域大展拳脚的证书&#xff0c;那么CDMP&#xff08;Certified Data Management Professional&#xff09;证书就是你的不二之选&#xff01;&#…

【数据结构】链表的分类和双向链表

本篇是基于上篇单链表所作&#xff0c;推荐与上篇配合阅读&#xff0c;效果更加 http://t.csdnimg.cn/UhXEj 1.链表的分类 链表的结构非常多样&#xff0c;以下情况组合起来就有8种&#xff08;2 x 2 x 2&#xff09;链表结构&#xff1a; 我们一般叫这个头为哨兵位 我们上回…

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…
最新文章