当前位置: 首页 > news >正文

方法引用知识

一.方法引用概述

方法引用

  把已经有的方法拿过来引用,当做函数式接口中抽象方法的方法体

要求:

  1. 引用处必须是函数式接口
  2. 被引用的方法必须已经存在
  3. 被引用方法的形参与返回值需要跟抽象方法保持一致
  4. 被引用方法的功能要满足当前需求

public static void main(String[] args){//需求:创建一个数组,进行倒序排序Integer[] arr={3,4,5,1,6,2};//匿名内部类Arrays.sort(arr,new Comparator<Integer>(){@Overridepublic int compare(Integer o1, Integer o2){return o2-o1;}
});//lambda表达式//因为第二个参数的类型Comparator是一个函数式接口Arrays.sort(arr,(Integer o1,Integer o2)->{return o2-o1;
});//lambda表达式简化格式Arrays.sort(arr,(o1,o2)->o2-o1);//方法引用//1.引用处需要是函数式接口//2.被引用的方法需要已经存在//3.被引用方法的形参和返回值需要和抽象方法的形参与返回值保持一致//4.被引用方法的功能需要满足当前的需求//表示引用FunctionDemo1类里面的subtraction方法//把这个方法当做抽象方法的方法体Arrays.sort(arr,FunctionDemo1::subtraction);}//可以是Java已经写好的,也可以是一些第三方的工具类
public static int subtraction(int num1, int num2){return num2-num1;
}}

二.引用静态方法

格式: 类名::静态方法

范例:Integer::parseInt

//需求: 集合中有以下数字,要求把他们转换为int类型
//"1","2","3","4","5"//1.创建集合并添加元素
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"1","2","3","4","5");//2.把他们都变成int类型
list.stream().map(new Function<String, Integer>(){@Overridepublic Integer apply(String s){int i=Integer.parseInt(s);return i;
}
}).forEach(s->System.out.println(s));//或者使用方法引用
list.stream().map(Integer::parseInt).forEach(s->System.out.println(s));

三.引用成员方法

格式: 对象::成员方法

  • 其它类: 其它类对象:: 方法名
  • 本类:this::方法名(需要在非静态方法中)
  • 父类:super::方法名(需要在非静态方法中)
StringOperation so=new StringOperation();
list.stream().filter(so::stringJudge).forEach(s->System.out.println(S));

四.引用构造方法

格式:类名::new

范例: student:: new

练习:

  集合里面存储姓名和年龄,比如:张无忌,15   要求:将数据封装成Student对象并收集到List集合中

import java.util.*;
import java.lang.String;
import java.util.function.Function;
import java.util.stream.Stream;public class main {public static void main(String[] args)  {ArrayList<String> arr = new ArrayList<>();Collections.addAll(arr,"张无忌,15","周芷若,14","赵敏,13", "张强,20", "张三丰,100", "张翠山,40", "张良,35", "王二麻子,37" );arr.stream().map(new Function<String, Actor>() {@Overridepublic Actor apply(String s) {return new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1]));}}).forEach(a-> System.out.println(a));}}

转变为下述(Actor)

public class Actor {private String name;private int age;public Actor() {}public Actor(String str) {this.name = str.split(",")[0];this.age = Integer.parseInt(str.split(",")[1]);}public Actor(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Actor{name = " + name + ", age = " + age + "}";}
}

main

import java.util.*;
import java.lang.String;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class main {public static void main(String[] args)  {ArrayList<String> arr = new ArrayList<>();Collections.addAll(arr,"张无忌,15","周芷若,14","赵敏,13", "张强,20", "张三丰,100", "张翠山,40", "张良,35", "王二麻子,37" );arr.stream().map(Actor::new).collect(Collectors.toList()).forEach(a-> System.out.println(a));   } }

五.使用类名引用成员方法

格式类名::成员方法

范例:String::substring

练习:集合里面一些字符串,要求变成大写后进行输出

import java.util.*;
import java.lang.String;public class main {public static void main(String[] args)  {ArrayList<String> arr = new ArrayList<>();Collections.addAll(arr,"aaa","bbb","ccc","ddd");
//        arr.stream().map(new Function<String, String>() {
//            @Override
//            public String apply(String s) {
//                return s.toUpperCase();
//            }
//        }).forEach(a-> System.out.println(a));arr.stream().map(String::toUpperCase).forEach(a-> System.out.println(a));}}

六.引用数组的构造方法

格式: 数据类型[]::new

范例: int[]::new

练习:集合中存储一些整数,收集到数组当中

import java.util.*;
import java.lang.String;
import java.util.function.IntFunction;public class main {public static void main(String[] args)  {ArrayList<Integer> arr = new ArrayList<>();Collections.addAll(arr,1,2,3,4,5,6);
//        Integer[] integers = arr.stream().toArray(new IntFunction<Integer[]>() {
//            @Override
//            public Integer[] apply(int value) {
//                return new Integer[value];
//            }
//        });
//        System.out.println(Arrays.toString(integers));Integer[] integers = arr.stream().toArray(Integer[]::new);System.out.println(Arrays.toString(integers));}}


文章转载自:

http://hyD081qq.yLxgw.cn
http://41VeC2eu.yLxgw.cn
http://KnD6LzKY.yLxgw.cn
http://T6nOHWHo.yLxgw.cn
http://kXUp6HSF.yLxgw.cn
http://xwbuQZFy.yLxgw.cn
http://2jMQ7DBL.yLxgw.cn
http://LcoVeQcL.yLxgw.cn
http://r3RBe1ju.yLxgw.cn
http://V9qVE5Vm.yLxgw.cn
http://QjctqCHU.yLxgw.cn
http://VlLft54w.yLxgw.cn
http://j4bRcb2S.yLxgw.cn
http://rmFSSKdV.yLxgw.cn
http://EUpORB34.yLxgw.cn
http://LgvPBh7Y.yLxgw.cn
http://5qF9aOGp.yLxgw.cn
http://Oszm2Mtg.yLxgw.cn
http://sabwocB7.yLxgw.cn
http://MqhgChUs.yLxgw.cn
http://gsrFpGQw.yLxgw.cn
http://Ye8tiHzK.yLxgw.cn
http://z2TO0woG.yLxgw.cn
http://9wv66gEY.yLxgw.cn
http://Vr7xjU9m.yLxgw.cn
http://pwFEFkiT.yLxgw.cn
http://08ynkPdo.yLxgw.cn
http://rZQeF1vu.yLxgw.cn
http://DF6U0L8a.yLxgw.cn
http://zHmXbVI8.yLxgw.cn
http://www.dtcms.com/a/373875.html

相关文章:

  • gtest全局套件的测试使用
  • [硬件电路-163]:Multisim - 功能概述
  • vue集成高德地图API工具类封装
  • Elixir通过Onvif协议控制IP摄像机,ExOnvif库给视频流叠加字符
  • GEM5学习(5): ARM 架构功耗仿真
  • TCP 拥塞控制与四次挥手解析
  • Linux 进程深度解析:从底层架构到虚拟地址空间
  • 软件测试之测试分类(沉淀中)
  • 使用Postfix+Dovecot+数据库+Web界面搭建邮件服务器详细指南
  • ubuntu 安装 docker 详细步骤
  • 无外部依赖!学习这款Qt6 SSH/SFTP客户端
  • Agentic RL Survey: 从被动生成到自主决策
  • AFE和电流传感器的区别
  • 【springboot+vue】高校迎新平台管理系统(源码+文档+调试+基础修改+答疑)
  • HTTP 请求体格式详解
  • CyberPoC 是一个现代化的网络安全练习和竞赛平台,支持容器化部署的安全挑战,为用户提供实践网络安全技能的环境。
  • Mybatis Log Plugin打印日志,会导致CPU升高卡死
  • 并发编程原理与实战(二十七)深入剖析synchronized底层基石ObjectMonitor与对象头Mark Word
  • 国产化Word处理组件Spire.DOC教程:使用 Python 将 Markdown 转换为 HTML 的详细教程
  • CanMV K230 2025年度计划
  • 简单视频转换器 avi转mp4
  • 如何修改不同城市IP查询排名以增强广告投放效果
  • 04-Redis 启动与停止:服务管理全攻略(含命令行与图形化操作)
  • LangChain: Agent(代理)
  • 使用 BatchRendererGroup 创建渲染器
  • flutter鸿蒙:使用flutter_local_notifications实现本地通知
  • Redis中数据类型详解
  • CentOS 7安装最新nginx
  • 解决Win11 安全中心删掉存在隐患的工具
  • 二级缓存在实际项目中的应用