Lambda支持的方法引用

目录

  • 引用类中的静态方法替换lambda
  • 引用对象实例化方法替换lambda
  • 引用类中的实例方法替换lambda
  • 引用构造器替换lambda

引用类中的静态方法替换lambda

  • 引用类方法:引用类的静态方法;`类名::静态方法名

==============================================`

demo: 将String类型数据转换成为Integer类型

创建一个接口名字为convers

package com.itxs.demo04;

/**
 * @Classname : convers
 * @Description : TODO 转换接口
 * @Author : lin_refuel@qq.com
 */
public interface convers {
	//数据转换方法
    Integer conver(String str);
}

demo01:测试上面接口

package com.itxs.demo04;

/**
 * @Classname : demo01
 * @Description : TODO 转换接口测试类
 * @Author : lin_refuel@qq.com
 */
public class demo01 {
    public static void main(String[] args) {
        // 匿名内部类方式
        res(new convers() {
            @Override
            public Integer conver(String str) {
                // 字符串转成Int类型数据
                return Integer.parseInt(str);
            }
        });
        // 完整的lambda
        res((String str) ->{
         return  Integer.parseInt(str);
        });
        // 省略的lambda
        res(str -> Integer.parseInt(str));
        // 通过静态方法替换lambda
        // 此时lambda的实参会作为静态方法的实参拿过来直接用
        res(Integer::parseInt);

    }
    private static void res(convers c){
      Integer ret = c.conver("9527");
        System.out.println(ret+1);
    }
}

个人理解:lambda就是针对接口,接口中只能有一个抽象方法,使用lambda时,就相当于直接重写了接口中的抽象方法,传递一个实际参数,直接写出你要做的事情

运行结果:
在这里插入图片描述

引用对象实例化方法替换lambda

  • 引用对象的实例方法:引用对象中的成员方法;对象::成员方法名

demo:小写的字符串转成大写

定义一个名字为printup的类

package com.itxs.demo05;

/**
 * @Classname : printup
 * @Description : TODO 输出大写字符串
 * @Author : lin_refuel@qq.com
 */
public class printup {
    public void printUp(String str){
        // toUpperCase是可以将小写转大写
        System.out.println("大写字母格式:"+str.toUpperCase());
    }
}

定义一个名字为printupp的接口

package com.itxs.demo05;

/**
 * @Classname : printupp
 * @Description : TODO 打印大写字符串
 * @Author : lin_refuel@qq.com
 */
public interface printupp {
    void printtup(String str);
}

测试类

package com.itxs.demo05;

import java.util.Locale;

/**
 * @Classname : test
 * @Description : TODO 引用实例化对象的方法
 * @Author : lin_refuel@qq.com
 */
public class test {
    public static void main(String[] args) {
        // 小写字符串转大写字符串
        // 匿名内部类的方式实现
        print2(new printupp() {
            @Override
            public void printtup(String str) {
                System.out.println(str.toUpperCase());
            }
        });
        // 完整的lambda方式
        print2((String str)->{
            System.out.println(str.toUpperCase());
        });
        // lambda省略
        print2(str -> System.out.println(str.toUpperCase()));
        // 引用对象实例化方法 实例化对象 :: 方法名
        // 个人感觉:形参 p中的方法printtup按照实例化对象printup中的printUp方法的样子进行重写
        print2(new printup()::printUp);
    }
    private static void print2(printupp p){
        p.printtup("abcdefg");
    }
}

运行结果:
在这里插入图片描述

引用类中的实例方法替换lambda

  • 引用类的实例方法:引用类中的成员方法;类名::方法名

demo:字符串截取

定义一个名字为intercept的接口

package com.itxs.demo06;

/**
 * @Classname : intercept
 * @Description : TODO
 * @Author : lin_refuel@qq.com
 */
public interface intercept {
    String cept(String str,int begin,int end);
}

test测试类,测试上面接口

package com.itxs.demo06;

/**
 * @Classname : test
 * @Description : TODO 字符串截取
 * @Author : lin_refuel@qq.com
 */
public class test {
    public static void main(String[] args) {
        //substring(),字符串截取方法
         //匿名内部类的方式
         res(new intercept() {
             @Override
             public String cept(String str, int begin, int end) {
                 return str.substring(begin,end);
             }
         });
         // lambda完整的写法
        res((String str,int begin,int end)->{
           return str.substring(begin,end);
        });
        // lambda省略
        res((str,begin,end)->str.substring(begin,end));
        // 引用类中实例方法进行替换,第一个参数作为对象,其他实参作为实例方法的形参进行传递
        res(String::substring);
    }
    private static void res(intercept i){
        String s = i.cept("abcdefg", 1, 5);//从下标1截取到下标4
        System.out.println(s);
    }
}

运行结果:
在这里插入图片描述

引用构造器替换lambda

  • 引用构造方器:引用构造方法;类名::new

demo:通过接口获取学生类对象的几种方式

创建一个学生类

package com.itxs.demo07;

/**
 * @Classname : Student
 * @Description : TODO
 * @Author : lin_refuel@qq.com
 */
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

定义一个接口,创建一个返回Student类型的抽象方法

package com.itxs.demo07;

/**
 * @Classname : student02
 * @Description : TODO
 * @Author : lin_refuel@qq.com
 */
public interface student02 {
    Student getstu(String name,Integer age);
}

test测试类

package com.itxs.demo07;

/**
 * @Classname : test
 * @Description : TODO 引用构造器替换lambda测试
 * @Author : lin_refuel@qq.com
 */
public class test {
    public static void main(String[] args) {
          // 匿名内部类获取一个学生类对象
         res(new student02() {
             @Override
             public Student getstu(String name, Integer age) {
                 return new Student(name,age);
             }
         });
         // lambda方式获取对象
        res((String name,Integer age)->{
            return new Student(name,age);
        });
        // 省略lambda
        res((name,age)->new Student(name,age));
        // 引用构造器
        res(Student::new);
    }
    private static void res(student02 sb){
        Student xs = sb.getstu("小肆", 18);
        System.out.println("姓名:"+xs.getName()+" 年龄:"+xs.getAge());
    }
}

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

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

相关文章

HCIA-HarmonyOS设备开发认证-序

序 最近涉及到HarmonyOS鸿蒙系统设备开发,在网络上已经有很多相关资料,视频教程,我也移植了公司的一个stm32G474板卡,运行LiteOS-m L0系统。 一面看资料一面移植,遇到不少坑,当看到运行的LOGO时&#xff0…

制冷培训一

常用制冷方法 1 相变制冷:汽液、液固 2 气体膨胀制冷:节流膨胀、膨胀机膨胀 3 半导体制冷: 4 涡流管制冷: 5 磁制冷: 6 稀释制冷: 7 激光制冷: 汽液相变制冷 1 蒸汽压缩制冷 2 蒸汽吸收制冷 3 …

大创项目推荐 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &#x…

C++参悟:正则表达式库regex(更新中)

正则表达式库regex(更新中) 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一、概述 C标准库为…

软件测试技术之【自动化测试】

自动化测试 自动化测试的定义:使用一种自动化测试工具来验证各种软件测试的需求,它包括测试活动的管理与实施、测试脚本的开发与执行。 自动化测试只是测试工作的一部分,是对手工测试的一种补充; 自动化测试绝不能代替手工测试;多数情况下&a…

自动控制原理——数学模型建立

目标 1.数学模型概念 描述系统输入、输出变量以及内部个变量之间的关系的数学表达式 2.建模方法 解析法(机理解析法): 根据系统工作所依据的物理定律写运动方程 实验法(系统辨识法): 给系统施加某种测试信号&am…

【C/Python】用GTK实现多文档窗体程序

一、用C语言 在GTK(GIMP Toolkit)中实现多文档接口(MDI)程序可以使用多种方法。GTK本身并没有提供专用的MDI窗口小部件,但可以使用标签页(Notebook)或多个窗口(Window)来…

P2P DMA并不是所有场景都会有性能提升

P2P (Peer-to-Peer) DMA技术理论上可以带来性能提升,特别是在特定的工作负载和场景下。例如,当两个高速设备(如GPU与NVMe SSD)需要频繁进行大量数据交换时,通过P2P DMA,数据可以直接在设备间传输&#xff0…

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了,搭了个 Latex的环境,跟windows上一样好用。 选择了 Mactex 做编译,用 Texmaker 做编辑; 1. 下载与安装 1.1 Mactex 下载安装 MacOS 安装和示例 LaTex 的编译器 与 编辑器 编译器使用免费…

支付宝小程序开发踩坑笔记(支付宝、学习强国小程序)

1、接口请求安卓端回调 success,IOS 端回调 fail 原因:dataType 设置不对,默认是 json 格式,对返回数据会进行 json 解析,如果解析失败,就会回调 fail 。加密传输一般是 text 格式。 2、input 禁止输入空格…

Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS

# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…

代码随想录算法训练营第三天 | 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

链表理论基础 链表是一种通过指针串连在一起的线性结构,每一个节点由两部分组成,一个是数据域,一个是指针域(存放指向下一个节点的指针)。最后一个节点的指针指向 null。链表的存储方式:数组在内存中是连续…

深度强化学习Task2:策略梯度算法

本篇博客是本人参加Datawhale组队学习第二次任务的笔记 【教程地址】 文章目录 基于价值算法和基于策略算法的比较策略梯度算法策略梯度算法的直观理解策略梯度算法REINFORCE算法基于平稳分布的策略梯度算法REINFORCE算法实现策略函数设计模型设计更新函数设计 练习总结 基于价…

注解实现校验接口传参是否超出取值范围

文章目录 1、定义注解2、使用注解3、其余校验实现思路2.04、其余校验实现思路3.0 写接口,Dto里很多字段要检验传参范围,自定义个注解来校验。 1、定义注解 注解定义代码: import javax.validation.Constraint; import javax.validation.Con…

2023年12月 电子学会 青少年软件编程等级考试Scratch三级真题

202312 青少年软件编程等级考试Scratch三级真题 一、单项题 第 1 题 运行左图程序,想得到右图中的效果,红色框应填写的数值是?( ) A:12 B:11 C:10 D:9 第 2 题 下列…

网站转小程序系统,任意网址打包成小程序

源码介绍 将任意网站打包成小程序,只需简单修改域名,即可轻松实现!这一创新技术让您的网站内容在小程序平台上焕发新生。通过智能转换工具,您可以将任意网站迅速转化为小程序,无需繁琐的编码和开发工作。只需简单修改…

小程序学习-19

Vant Weapp - 轻量、可靠的小程序 UI 组件库 ​​​​​ Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装出现问题:rollbackFailedOptional: verb npm-session 53699a8e64f465b9 解决办法:http://t.csdnimg.cn/rGUbe Vant Weapp - 轻量、可靠的小程序…

微服务不死 — 共享变量在策略引擎项目的落地详解

01 背景 1、共享变量的提出 前段时间,来自亚马逊 Prime Video 团队的一个案例研究在开发者社区中掀起了轩然大波。大体是这样一件事,作为一个流媒体平台,Prime Video每天都会向客户提供成千上万的直播流。为了确保客户无缝接收内容&#xff0…

多人在线聊天交友工具,匿名聊天室网站源码,附带搭建教程

源码介绍 匿名聊天室(nodejs vue) 多人在线聊天交友工具,无需注册即可畅所欲言!你也可以放心讲述自己的故事,说出自己的秘密,因为谁也不知道对方是谁。 运行说明 安装依赖项:npm install 启动…

SpringBoot整合Dubbo和Zookeeper分布式服务框架使用的入门项目实例

文章目录 SpringBoot整合Dubbo和Zookeeper分布式服务框架使用的入门项目实例Dubbo定义其核心部分包含: 工作原理为什么要用dubbo各个节点角色说明:调用关系说明: dubbo为什么需要和zookeeper结合使用,zookeeper在dubbo体系中起到什么作用&…
最新文章