2.2.引用静态方法

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 阅读详情

一.引用静态方法的格式:

  • 上述图片中Integer是整型的包装类,parseInt是Integer类里的静态方法,parseInt方法的作用是把字符串转为整数,parseInt是静态的,可以类名.方法名进行调用,也可以使用类名::静态方法名(方法引用)进行调用


二.练习:

题目:

解法一:

import java.util.ArrayList;
import java.util.Collections;
​
public class Main {
    public static void main(String[] args) {
        //1.创建字符串集合
        ArrayList<String> list1=new ArrayList<>();
​
        //2.添加元素
        Collections.addAll(list1,"1","2","3","4","5");
​
        //3.创建整型集合
        ArrayList<Integer> list2=new ArrayList<>();
​
        //4.遍历list1集合将其内容修改为整型并添加到list2集合中
        for (String s : list1) {
            int i = Integer.parseInt(s);
            list2.add(i);
        }
​
        //5.遍历list2集合
        System.out.println(list2); //运行结果为[1, 2, 3, 4, 5]
    }
}

解法一较为繁琐。

解法二:使用stream流里的map方法

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;
​
public class Main {
    public static void main(String[] args) {
        //1.创建字符串集合
        ArrayList<String> list=new ArrayList<>();
​
        //2.添加元素
        Collections.addAll(list,"1","2","3","4","5");
​
        //3.把list集合中的元素的数据类型都变为整型
        /*函数式接口Function的泛型有两个,
          第一个泛型是当前流里的类型,本例中list集合调用stream流,所以stream流里的类型就是list集合里的数据的类型,
          第二个泛型是要转化成的类型*/
        list.stream().map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                //s就是流里面的元素即集合list中的每一个元素,此时要把list集合中的元素的类型全部变成整型
                int i = Integer.parseInt(s);
                return i; //apply方法结束后就把list集合中的数据变为整数了
            }
        }).forEach(s-> System.out.println(s));
    }
}
注意事项:

Function是一个函数式接口(Function接口是一个函数式接口,而且此时是创建了Function接口的匿名内部类,这里可以用lambda表达式进行简化,就不做演示了),Function接口有两个泛型:在本例中第一个泛型是当前流里的数据的类型(调用该流的数据的类型就是第一个泛型的类型),第二个泛型是要转化成的类型

调用完map方法后可以new一个Function接口:

但是由于Function接口有两个泛型,此时只能确定第一个泛型类型是流里面的数据的类型,第二个泛型是要被转换为的数据类型,需要人为指定。系统默认为第二个泛型是顶级父类类型Object:

本例中第二个泛型需要被指定为Integer型:

由于Function接口中有一个抽象方法apply,此时就需要重写apply方法,快捷方式就是点击右上角红色感叹号,会弹出出错的地方,此时找到重写apply方法的那一条,右击后->显示快速修复->实现方法->根据需求重写apply方法,apply方法的形参类型需要和Function接口中第一个泛型类型保持一致(apply方法只有一个形参)。

还有一个地方报错就是缺;,在报错地方补上;即可。

解法三:使用方法引用来简化解法二里的代码

之所以使用方法引用来简化代码,是为了使代码看起来更简洁。

map方法里Function接口是函数式接口,所以在Function处可以使用方法引用,

要引用的方法需要满足以下要求:

1.被引用的方法需要已经存在,没有的话就需要自行编写 2.被引用的方法的形参和返回值需要跟抽象方法的形参和返回值保持一致 3.被引用的方法的功能需要满足当前的需求

Function接口中的抽象方法是apply方法,在map方法中已经对apply方法进行了重写,map方法里的apply方法的形参只有一个,且该形参类型是String型,apply方法的返回值是Integer型,apply方法的功能是把形参的字符串转化为整数

->此时就要找形参只有一个且该形参类型是String型,返回值为Integer型,且功能是把形参的字符串转化为整数的方法

->在Java中存在这样的方法,就是Integer类里的只有一个形参的parseInt方法:

只有一个形参的parseInt方法的方法体是返回一个parseInt方法,但这个parseInt方法有两个形参,功能也是把形参里的字符串转化为整数:

->所以可以引用Integer类里只有一个形参的parseInt方法:

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer;
​
public class Main {
    public static void main(String[] args) {
        //1.创建字符串集合
        ArrayList<String> list=new ArrayList<>();
​
        //2.添加元素
        Collections.addAll(list,"1","2","3","4","5");
​
        //3.把list集合中的元素的数据类型都变为整型
        /*通过分析map方法里可以直接引用Integer类里只有一个形参的parseInt方法,
          把Integer类里只有一个形参的parseInt方法当作函数式接口Function里的
          抽象方法的方法体 */
        list.stream().map(Integer::parseInt).forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println(integer);
            }
        });
    }
}

Consumer接口是一个函数式接口,而且此时是创建了Consumer接口的匿名内部类,所以可以使用lambda表达式简化,简化后:

import java.util.ArrayList;
import java.util.Collections;
​
public class Main {
    public static void main(String[] args) {
        //1.创建字符串集合
        ArrayList<String> list=new ArrayList<>();
​
        //2.添加元素
        Collections.addAll(list,"1","2","3","4","5");
​
        //3.把list集合中的元素的数据类型都变为整型
        /*通过分析map方法里可以直接引用Integer类里只有一个形参的parseInt方法,
          把Integer类里只有一个形参的parseInt方法当作函数式接口Function里的
          抽象方法的方法体 */
        list.stream()
                .map(Integer::parseInt)
                .forEach(integer -> System.out.println(integer) );
    }
}

解法四:

package com.itheima.a01myfunction;
​
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.stream.Stream;
​
public class FunctionDemo2 {
    public static void main(String[] args) {
        /*
         方法引用(引用静态方法)
         格式:
           类名::静态方法名 */
​
        //1.创建集合
        ArrayList<String> list=new ArrayList<>();
​
        //2.添加元素
        Collections.addAll(list,"1","2","3","4","5");
​
        //3.获取stream流
        Stream<String> stream = list.stream();
​
        //4.遍历
        /* s代表流里面的数据,此时list集合获取了stream流,
           所以s代表list集合中的数据 */
        stream.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                int result = Integer.parseInt(s); //此处不是函数式接口,不能用方法引用
                System.out.println(result);
            }
        });
    }
}
​

Consumer接口是一个函数式接口,而且此时是创建了Consumer接口的匿名内部类,所以可以使用lambda表达式简化,简化后:

package com.itheima.a01myfunction;
​
import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;
​
public class FunctionDemo2 {
    public static void main(String[] args) {
        /*
         方法引用(引用静态方法)
         格式:
           类名::静态方法名 */
​
        //1.创建集合
        ArrayList<String> list=new ArrayList<>();
​
        //2.添加元素
        Collections.addAll(list,"1","2","3","4","5");
​
        //3.获取stream流
        Stream<String> stream = list.stream();
​
        //4.遍历
        /* s代表流里面的数据,此时list集合获取了stream流,
           所以s代表list集合中的数据 */
        stream.forEach( s -> {
                int result = Integer.parseInt(s); //此处不是函数式接口,不能用方法引用
                System.out.println(result);
        });
    }
}
​

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化 在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现 阅读详情

相关推荐

SVPWM原理与MCU/FPGA实现:从数学推导到工程实战

空间矢量调制(SVPWM)是实现高性能电机驱动控制的核心算法之一,其通过六个基本电压矢量与零矢量的伏秒平衡,在一个PWM周期内合成任意方向的旋转电压圆,相比传统SPWM可提升约15%的直流电压利用率。该技术不仅涉及扇区判断、作用时间计算、过调制限幅等数学原理,还在MCU与FPGA两种硬件平台上有不同的工程实现路径,包括中心对齐PWM配置、死区插入、定点数流水线设计等。在电动工具、无人机、机器人及车载执行器等电池供电场景中,SVPWM直接决定续航与扭矩表现。本文从数学原理出发,详细拆解MCU和FPGA实现细节

weixin_34265814的博客 301

JAVA 方法引用——静态方法引用、实例方法引用、特定类型方法引用

方法引用: 在某些场景之下,Lambda表达式要做的事情,其实在另一个地方已经写过了。 那么此时如果通过Lambda表达式重发编写相同代码,就是浪费。 那么如何才能复用已经存在的方法逻辑呢? 如果Lamda表达式需要做的事情,在另外一个类当中已经做过了,那么可以直接拿过来替换Lambda 一.通过 类名称 引用 静态方法 : 类名称::静态方法名 事先存在一个Cook类: public cla...

七七的博客 3547

机器人强化学习入门学习笔记

如果你追求高精度动力学仿真、用于强化学习或机器人研究,MuJoCo 是一个非常优秀的选择。如果需要快速实验、使用真实机器人模型,PyBullet 或 Gazebo可能更合适;如果你追求大规模并行训练,Isaac Gym 或 BraX会更高效。legged gym底层是​编辑isaacgym,基于gpu训练可以多环境并行训练,收敛到一个稳定行走的策略快。本视频MuJoCo基于cpu训练很慢。

xiaomu_347的博客 1470

c#入门-静态引用,扩展方法

引用命名空间时,可以在using后面加static修饰符。然后把要引用的命名空间改为带命名空间的一个具体的类。这称为静态引用。

zms9110750的博客 1212

【Unity】YooAsset + HybridCLR热更

本文介绍了Unity游戏开发中的热更新技术方案,重点对比了资源热更和代码热更的主流工具。资源热更方面分析了Asset Bundle、Addressable和YooAsset的优缺点;代码热更部分比较了xLua、ILRuntime、InjectFix和HybridCLR的性能特点。文章详细演示了HybridCLR+YooAsset的实践方案,包括加载热更新程序集、反射调用热更代码、资源打包部署等完整流程。该方案通过原生运行时实现程序集级热更,具有极低性能损耗和全生命周期适用性,配合YooAsset简化了资源管

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 2918

ANSYS WB 网格划分详解与技巧

本文详细介绍了网格操作中的关键设置与功能选项。主要内容包括:1)网格显示风格与物理偏好设置;2)单元阶次选择对精度的影响;3)单元尺寸控制方法;4)尺寸调整功能,重点讲解了自适应尺寸调整、增长率控制和捕获曲率等选项;5)网格质量评估标准;6)四种主要划分方法(四面体、六面体主导、扫掠、多区域)的特点与适用场景;7)三种尺寸调整方式(直接调整、边缘尺寸调整、影响范围调整)的具体应用。文章强调在实际建模中需要根据模型特点合理选择网格参数,平衡计算精度与效率。

2403_87939837的博客 1698

Java笔记:方法引用

必须要创建类的对象然后再调用类中的方法,随后,为了简化这一繁琐的过程,我们可以直接用匿名内部类直接调用,省去了创建对象的过程,再后来我们学习了lambda表达式,又一次对匿名内部类进行简化。那么,既然有静态方法引用,那么肯定也就有实例方法引用,格式与静态方法引用类似,但值得注意的是,实例方法只能被对象所访问,所以在使用实例方法引用之前,我们要先创建一个对象出来。注意:用方法引用的时候不用带上参数,简单理解:方法引用的格式是 类名::静态方法名,人家要的是方法名,方法名包含参数吗?

2301_81294700的博客 448

汽车软件工程师必看:ASPICE开发流程全解析(附各阶段交付物清单)

本文全面解析了汽车行业广泛采用的ASPICE开发流程,详细介绍了从需求挖掘到系统架构设计、软件工程及测试验证各阶段的关键操作和交付物清单。针对汽车软件工程师,提供了实用的协作指南和工具推荐,帮助团队提升开发效率并降低项目风险,是掌握ASPICE标准的必备指南。

weixin_30733003的博客 647

方法引用类型及应用

如果某一个Lmabda 表达式只是调用一个静态方法,并且“->”前后参数一致,就可以使用静态方法引用。如果某一个Lmabda 表达式只是调用一个实例方法,并且“->”前后参数一致,就可以使用实例方法引用。如果某一个Lmabda 表达式只是调用一个特定类实例方法,并且前面参数列表中的第一个参数是作为方法的。如果某一个Lmabda 表达式只是创建对象,并且“->”前后参数一致,就可以使用构造器引用。1.格式:对象名::方法名。1.格式:类名::方法名。1.格式:类名::new。

l13515420256的博客 221

YOLOv11涨点改进 | Neck改进篇 | YOLOv11引入 BiFPN双向特征金字塔网络,显著提升了多尺度特征融合效率

本文介绍了基于BiFPN特征融合模块优化的YOLOv11目标检测模型。BiFPN通过双向跨尺度连接和加权特征融合机制,显著提升了多尺度特征融合效率。该方法在COCO数据集上实现了55.1AP的检测精度,同时大幅降低计算成本(减少13-42倍FLOPs)。文章详细解析了BiFPN模块结构、核心代码实现方法,并提供了YOLOv11-BiFPN配置文件的修改指导,为计算机视觉领域提供了一种高效的目标检测解决方案。

Ai缝合怪、助力小伙伴高效发论文 717

大模型工作流Dify面试题及参考答案

设计一个基于 Dify 的智能摘要与重点提取 Agent,需结合Prompt 工程、模型能力配置和工作流优化,确保对长文本的高效解析和关键信息提炼。1. 明确任务需求与输入输出输入:长文本内容(如文章、报告、会议记录)或文本 URL输出摘要:简洁概括原文核心内容,控制在原文长度的 10%-20%重点列表:分点列出关键数据、结论、行动项等可选:关键词提取、情感倾向分析示例场景输入:一篇 5000 字的行业报告。

大模型大数据攻城狮的专栏 2516

【Java-API】lambda表达式4种方法引用

首先lambda表达式4种方法引用可以归纳为下列4种: 1,静态方法引用 2,实例方法引用 3,构造方法引用 4,特殊方法引用

m0_64210833的博客 4621

一文带你了解什么是RDMA

RDMA(Remote Direct Memory Access,远程直接内存访问)是一种起源于高性能计算领域的通信技术,如今已广泛应用于数据中心。该技术使得用户程序能够绕过操作系统内核及CPU,直接与网络接口卡(NIC)交互,实现网络通信。这种方式不仅大幅提升了通信带宽,还显著降低了网络延迟,优化了整体性能。

嵌入式技术开发 6016

JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)

静态方法的引用 类名 :: 静态方法。 使用场景 如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。 实例方法的引用 对象名 :: 实例方法 使用场景 如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。 特定类型的方法引用 类型 ::方法 使用场景 如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特

li13437542099的博客 1524

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

24.2 方法引用详解:通过类名引用成员方法与静态方法、super与this引用成员方法、类的构造器引用、数组的构造器引用

目录 方法引用 用方法引用改进代码 列:实现方法引用 方法引用:通过对象名引用成员方法 方法引用:通过类名称引用静态方法 方法引用:通过super引用成员方法 方法引用:通过this引用成员方法 方法引用:类的构造器引用 方法引用:数组的构造器引用 方法引用 用方法引用改进代码 双冒号 :: 写法,这被称为“方法引用”,而双冒号是一种新的语法 双冒号 :: 为引用运算符,而它所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒

Birdlun的博客 731

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

1,静态方法和实例方法的调用 2,子类的对象赋值给父类的引用和直接使用子类对象的区别

##1,静态方法和实例方法的调用 2,子类的对象赋值给父类的引用和直接使用子类对象的区别 class Fu1 { int length=10; public static void getArea1() { System.out.println("English"); } public void getArea2() { System.out.println("Chinese"); } } public class Main1 extends Fu1{ i

juiceisnice的博客 362

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java调用超类/父类静态方法:java用.符号,c++用::符号

JAVA调用父类静态方法的格式:类名.静态方法。不能用C++的款式即 类名::静态方法。之所以这样说是因为有一本书上面写错了。

267

方法引用-通过类名引用静态成员方法

public class FuXi2 { public static void main(String[] args) { demo01(Integer::valueOf,"222222222");//方法引用简化了lambda表达式 /*Integer对象存在 valueOf静态方法也存在 * 所以可以直接通过类名引用静态方法 * 个人理解:只要lambda表达式中有对象在调用方法 就可以使用方法引用来简化lambda表达式*/ } private...

qq_20564455的博客 407

OGNL引用静态方法无效

想用ognl引用一下系统时间常量System.currentTimeMillis(),结果,用  怎么样也显示不了,也不报错,去网上查资料,显示的也是上述语句,非常郁闷, 后来查文档才发现原来struts 2.1.2 改了配置文件,默认静态方法设置成不引用,需要在struts.xml中加入  配置完成后,重启服务器,显示正常  记笔记...备忘

沉没的Atlantic 1201

方法引用的 4 + 2 种方式

* 方法引用的 4 + 2 种方式 对于类来说,有4种方式 1. 对象引用成员方法 2. 类名引用静态方法 3. super引用父类方法 4. this引用本类方法 对于构造器来说,有2种方法。 1. 类的构造器引用 2. 数组的构造器引用。 1 ...

我不是大王强的博客 568

Jni 反射调用java静态方法

Jni 反射调用java静态方法 因为项目原因,项目中使用的是c来写的,需要在c中来设置SystemProperties, 所以需要在c中以反射的方式来设置,好在Jni支持 1.Native方法注册(使用的静态方法注册) 1.1在java中声明一个native方法 package com.liuhang.demo public class Test{ static { S...

liu_hang_LH的博客 1105

在python种实现类的静态方法

题目:在python种实现类的静态方法摘要:讲述在python种实现类似java的static method的方法时间:2005年02月24日方法一:使用__call__eg:import osclass Command:    class _StaticCommand:        def __call__(self,command):            os.system(comma

snowway's blog 1312

父类引用指向子类对象

package hw.基础学习.继承; public class ExtendsTest { public static void main(String[] args) { System.out.println("--------父类引用指向子类对象-----------"); Father instance = new Son(); instance.printValue(); instance.printValue2(.

记录个人学习笔记总结,遇见问题等 6459

JAVA:无法从静态上下文中引用非静态变量

为什么会报这个错嘞 静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给出错误. 是因为对象引用错误 举个例子 //这是主类 public class MyApplication2 { public static void main(String[] args) { People p1 = new People(0.0, 0.0);//我

qq_52428045的博客 1081

JAVA 方法引用

package com.interfaces; public class Demo2 { public static void main(String[] args) { start(s-> Integer.parseInt(s)); //引用类方法 start( Integer::parseInt); //Lam...

qq_36466946的博客 65

Asp.net AJAX调用后台静态方法总结

从客户端调用后台静态方法 1.Ajax Library方式 C#代码: [WebMethod] public static DateTime GetCurrentTime(string str) { return DateTime.Now; } JS代码: &lt;form id="form1" runat="server"&gt...

weixin_34291004的博客 310
上一篇: 2.1.方法引用概述
下一篇: 1.5.Stream流-Stream流的终结方法中的收集方法collect超详解
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值