Lambda支持的方法引用

news2024/11/26 9:08:19

目录

  • 引用类中的静态方法替换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.coloradmin.cn/o/1399853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 8.3 发布, 它带来哪些新变化?

1月16号 MySQL 官方发布 8.3 创新版 和 8.0.36 长期支持版本 (该版本 没有新增功能,更多是修复bug ),本文基于 官方文档 说一下 8.3 版本带来的变化。 一 增加的特性 1.1 GTID_NEXT 支持增加 TAG 选项。 之前的版本中 GTID_NEXTUUID:number &#xff…

Ant下载及安装

文章目录 前言一、Ant下载二、Ant安装三、Ant配置环境变量 前言 Ant是一个帮助构建软件的Java库和命令行工具。Ant是一个Java库和命令行工具,其任务是将构建文件中描述的过程驱动为相互依赖的目标和扩展点。Ant的主要已知用途是构建Java应用程序。Ant提供了许多内置…

DolphinScheduler-3.2.0集群部署教程

本文目录 1.集群部署方案(2 Master 3 Worker)2.前置准备工作3.端口说明4.DS集群部署1.时间同步2.配置用户、权限3.配置集群免密登陆4.ZK集群启动5.初始化数据库1.创建数据库、用户、授权2.解压缩安装包3.添加MySQL驱动至libs目录 6.配置文件修改1.dolphinscheduler_env.sh 配置…

为vs code配置unity开发环境

1.安装.NET.Core SDK 我们可以访问官网下载安装SDK及tool(https://www.microsoft.com/net/download/core)下载。有的系统只提供了执行文件,没有提供安装包,需要自己做一些配置。 下载好对应的版本就可以安装了,安装好以…

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法,也是经常使用的命令, -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示,top命令可以看…

实现SERVLET应用程序

实现SERVLET应用程序 Smart Software 的开发人员希望开发一个Web应用程序,使用servlet显示保存在表中的雇员信息。该应用程序需要有用户界面,用户可在该用户界面中指定要查看雇员数据的雇员ID。该界面还应显示网站被访问的次数。 解决方案 要解决上述问题,需要执行以下任务…

cs231n assignment1——SVM

整体思路 加载CIFAR-10数据集并展示部分数据数据图像归一化,减去均值(也可以再除以方差)svm_loss_naive和svm_loss_vectorized计算hinge损失,用拉格朗日法列hinge损失函数利用随机梯度下降法优化SVM在训练集和验证集计算准确率&a…

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…

(3)【Python数据分析进阶】Machine-Learning模型与算法应用-线性回归与逻辑回归

目录 一、Linear Regression线性回归应用 应用案例(一)——自定义数据(Custom data) 1、下载安装sklearn库 2、导入库函数 3、加载数据集 4、创建线性回归对象 5、模型训练 6、预测结果 7、绘制模型图像 8、应用模型进行…

014-信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

014-信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目 #知识点: 1、JS前端架构-识别&分析 2、JS前端架构-开发框架分析 3、JS前端架构-打包器分析 4、JS前端架构-提取&FUZZ 解决: 1、如何从表现中的JS提取…

SpringBoot:详解Bean生命周期和作用域

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、生命周期二…

禅道的安装及使用流程

目录 一.安装 1.下载禅道安装包​http://www.zentao.net/ 2.选择禅道开源版 3.选择需要下载的安装包(注意:下载的安装包必须放在根目录,不能移动) 4.将下载的安装包双击进行解压;解压后的文件为d:\xampp&#xff1b…

AI绘画Stable Diffusion进阶使用

本文讲解,模型底模,VAE美化模型,Lora模型,hypernetwork。 文本Stable Diffusion 简称sd 欢迎关注 使用模型 C站:https://civitai.com/ huggingface:https://huggingface.co/models?pipeline_tagtext-to-…

解锁黑匣子:Chain-of-Note如何为(RAG)带来透明度

英文原文地址:https://ai.plainenglish.io/unlocking-the-black-box-how-chain-of-note-brings-transparency-to-retrieval-augmented-models-rag-ae1ebb007876 论文地址:https://arxiv.org/pdf/2311.09210.pdf 2023 年 11 月 16 日 介绍 检索增强语…

AWS 专题学习 P8 (ECS、EKS、Lambda、CloudFront、DynamoDB)

文章目录 什么是 Docker?操作系统上的 DockerDocker 镜像存储Docker vs. Virtual MachinesDocker 入门AWS 中的 Docker Containers Management Amazon ECSEC2 Launch TypeFargate Launch TypeECS 的 IAM RolesLoad Balancer IntegrationsData Volumes (EFS)ECS Serv…

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

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

TypeScript教程(一)在vscode中的配置TypeScript环境

TypeScript教程(一)在vscode中的配置TypeScript环境 文章目录 TypeScript教程(一)在vscode中的配置TypeScript环境一、前言二、具体步骤1、Node.js安装2、TypeScript安装3、helloworld 一、前言 未来的开发者们请上座&#xff0c…

EasyRecovery2024电脑数据恢复工具好不好用?

Ontrack是我们综述中的第一个产品,由于该软件的功效和广度,我认为它完全基于业务。有一个具有基本功能的免费版本和一系列付费版本,不仅可以恢复文件(免费版和家庭版),还可以创建磁盘映像/从 CD 和 DVD 恢复…

如何自学Python:一份详细的指南

📝个人主页:五敷有你 🔥系列专栏:有感而谈⛺️稳中求进,晒太阳 引言 Python是一种广泛使用的高级编程语言,以其简洁明了的语法和强大的功能而受到许多程序员的喜爱。无论是数据分析、网络开发&#…

基于JavaWeb+SSM+Vue基于微信小程序的在线投稿系统的设计和实现

基于JavaWebSSMVue基于微信小程序的在线投稿系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 MYSQL数据库 3 2.3 u…