package java_Java_Collection;
import org.junit.Test;
import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* 方法引用的使用
*
* 1.使用情境:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
*
* 2.方法引用,本质上就是Lambda表达式,而Lambda表达式作为函数式接口的实例。所以
* 方法引用,也是函数式接口的实例。
*
* 3. 使用格式: 类(或对象) :: 方法名
*
* 4. 具体分为如下的三种情况:
* 情况1 对象 :: 非静态方法
* 情况2 类 :: 静态方法
*
* 情况3 类 :: 非静态方法
*
* 5. 方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的
* 形参列表和返回值类型相同!(针对于情况1和情况2)
*
*/
public class MethodRefTest {
// 情况一:对象 :: 实例方法
//Consumer中的void accept(T t)
//PrintStream中的void println(T t)
@Test
public void test1() {
Consumer<String> con1 = str -> System.out.println(str);
con1.accept("北京");
System.out.println("*******************");
PrintStream ps = System.out;
Consumer<String> con2 = ps::println;
con2.accept("beijing");
}
//Supplier中的T get()
//Employee中的String getName()
@Test
public void test2() {
Employee emp = new Employee(1001,"Tom",23,5600);
Supplier<String> sup1 = () -> emp.getName();
System.out.println(sup1.get());
System.out.println("*******************");
Supplier<String> sup2 = emp::getName;
System.out.println(sup2.get());
}
// 情况二:类 :: 静态方法
//Comparator中的int compare(T t1,T t2)
//Integer中的int compare(T t1,T t2)
@Test
public void test3() {
Comparator<Integer> com1 = (t1,t2) -> Integer.compare(t1,t2);
System.out.println(com1.compare(12,21));
System.out.println("*******************");
Comparator<Integer> com2 = Integer::compare;
System.out.println(com2.compare(12,3));
}
//Function中的R apply(T t)
//Math中的Long round(Double d)
@Test
public void test4() {
Function<Double,Long> func = new Function<Double, Long>() {
@Override
public Long apply(Double d) {
return Math.round(d);
}
};
System.out.println("*******************");
Function<Double,Long> func1 = d -> Math.round(d);
System.out.println(func1.apply(12.3));
System.out.println("*******************");
Function<Double,Long> func2 = Math::round;
System.out.println(func2.apply(12.6));
}
// 情况三:类 :: 实例方法 (有难度)
// Comparator中的int comapre(T t1,T t2)
// String中的int t1.compareTo(t2)
@Test
public void test5() {
Comparator<String> com1 = (s1,s2) -> s1.compareTo(s2);
System.out.println(com1.compare("abc","abd"));
System.out.println("*******************");
Comparator<String> com2 = String :: compareTo;
System.out.println(com2.compare("abd","abm"));
}
//BiPredicate中的boolean test(T t1, T t2);
//String中的boolean t1.equals(t2)
@Test
public void test6() {
BiPredicate<String,String> pre1 = (s1,s2) -> s1.equals(s2);
System.out.println(pre1.test("abc","abc"));
System.out.println("*******************");
BiPredicate<String,String> pre2 = String :: equals;
System.out.println(pre2.test("abc","abd"));
}
// Function中的R apply(T t)
// Employee中的String getName();
@Test
public void test7() {
Employee employee = new Employee(1001, "Jerry", 23, 6000);
Function<Employee,String> func1 = e -> e.getName();
System.out.println(func1.apply(employee));
System.out.println("*******************");
Function<Employee,String> func2 = Employee::getName;
System.out.println(func2.apply(employee));
}
}
相关推荐
libcurl库使用详情、libcurl库的制作
libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 、库下载。这种库使用的时候就像使用wiringPi库一样,编写完代码需要链接这个库,所以要先下载这个库。libcurl的使用(其实和socket编程时一样,都需要一定的步骤):
【Java 基础篇】Java方法引用详解
本文详细介绍了Java方法引用的概念、语法和使用方法。方法引用是Java 8引入的重要特性,可以简化函数式编程的代码编写,提高开发效率。通过学习和应用方法引用,开发人员可以编写更简洁、易读的代码,并利用函数式接口、Lambda表达式、Stream API等技术实现更高效的程序。希望本文对你理解和应用Java方法引用有所帮助!
解决fetch_california_housing数据集403错误的3种实用方法(附手动下载地址)
本文针对机器学习中常见的fetch_california_housing数据集403 Forbidden错误,提供了三种实用的解决方案。从理解HTTP 403错误的根源出发,详细介绍了修改源码路径、使用国内镜像源以及手动下载并配置数据文件这三种方法,并附带了可靠的手动下载地址,帮助开发者彻底解决数据加载障碍,确保机器学习项目顺利进行。
Java8新特性 - 04 - 方法引用04 - 方式三 【类名::实例方法】
1.类名::实例方法 1.将Lambda表达式 替换为 【类名::实例方法】 的写法。 2.确保 【实例方法】 的 参数与返回值 和 Lambda表达式的一致! 【特别注意】 : 此方式的抽象方法的第一个参数,实际上是充当了方法的调用者, 即,抽象方法的第一个参数一定是 对应的类的 一个对象; 后面的参数,才是真正的方法的使用到的参数。 【实际上是对 【对象::实例方法名】的一种变相的写法】 2.案例代码 本案例从 匿名内部类 --> Lambda 表达式 --> 方法引用 【类名::实
Excel聚光灯效果终极指南:VBA代码实现与条件格式避坑技巧
本文详细解析了Excel聚光灯效果的实现方法,包括VBA代码优化与条件格式的避坑技巧。通过模块化编程和性能优化技术,帮助用户高效处理大型数据表格,实现自定义高亮显示,提升数据分析和报表阅读体验。
【AI生成】市面上主流自组网厂家的技术及市场研究
经过对全球自组网产业技术特征与市场格局的系统分析,本文得出以下核心结论:技术演进呈现智能化与融合化双轨路径 当前自组网技术创新已突破传统组网架构局限,形成"协议优化-架构创新-场景适配"的递进式发展路径。国际厂商聚焦智能算法应用,如Silvus采用深度学习实现动态拓扑优化,传输时延较传统方案降低37%;国内企业则侧重异构网络融合,中国移动设计院提出的5G LAN架构使工业场景通信可靠性提升至99.99%。
【Java基础教程】(二十八)Java新特性篇 · 第八讲:方法引用——概念及优缺点、语法形式及使用案例、应用场景与注意事项 ~
方法引用是Java编程语言中的一个重要特性,它能够简化代码、提高可读性和复用性。通过灵活应用方法引用,可以使代码更加清晰、简洁,并减少开发的工作量。
LabVIEW与VisionMaster融合开发:从封装避坑到高效集成的实战指南
本文为LabVIEW开发者提供了一套与海康VisionMaster融合开发的实战指南。针对直接调用SDK时遇到的程序集加载失败和面向对象编程冲突等核心障碍,文章详细介绍了通过C#进行“浅封装”的解决方案,包括封装显示控件和核心功能类,并给出了在LabVIEW中高效集成、调用及资源管理的最佳实践,旨在帮助开发者稳定、高效地集成机器视觉功能。
引用和指针的区别,*和&操作符
一、在声明中见到这两个操作符(*和&)时: ①在程序声明变量的时候使用的*,只是表明“它是一个整数,这个整数为某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆; ②在程序声明变量的时候使用的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。 这点不要和(*)声明符,(&)操作符混
树莓派5安装ROS1避坑指南:从系统配置到cmake报错全解决
本文详细介绍了在树莓派5上安装ROS1的完整流程,包括系统配置、环境变量设置、cmake报错解决等关键步骤。针对树莓派5的ARM架构特性,提供了从基础安装到高级调试的系统级解决方案,帮助开发者高效部署ROS1并避免常见编译陷阱。特别针对cmake报错问题,给出了深度解析和实用修复方法。
9、工业数据管理:Historian、ERP、MES与资产模型解析
本文深入解析了工业数据管理中的核心概念与技术,包括Historian数据库、ERP和MES系统以及资产模型。文章详细介绍了Historian数据库的特性、架构分类、数据采集方式及时间序列处理能力,同时探讨了ERP和MES系统的功能与优势,特别是MES在生产执行中的重要作用。资产模型部分结合ISA-95和ISA-88标准,阐述了工业资产的层次化建模方法。此外,文章还分析了各系统之间的协同关系、面临的挑战及应对策略,并展望了未来工业数据管理的发展趋势,如云原生技术、人工智能融合和工业物联网的应用。
Java学习----【Java8】 方法引用详解
方法引用省去了lambda,将接口方法实现的内容封装到具体方法,将方法作为接口实现,实际也是实现且创建一个接口对象。只是更加抽象,只能看到接口方法内部实现(调用的这个方法就是具体实现)。采用方法引用可以更近一步的简化代码,有时候这种简化让代码看上去更加的直观。
一文掌握DrissionPage的详细使用
是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。
Java8(JDK1.8)新特性
1、速度快;2、代码少、简介(新增特性:lamdba表达式);3、强大的Stream API;4、使用并行流和串行流;5、最大化较少空指针异常Optional;其中最为核心的是Lambda表达式和Stream APILambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。...
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
JDK8新特性之方法引用
JDK8新特性之方法引用 文章目录JDK8新特性之方法引用方法引用1. 为什么要用方法引用1.1 lambda表达式冗余1.2 解决方案2. 方法引用的格式2.1 对象名::方法名2.2 类名::静态方法名2.3 类名::引用实例方法2.4 类名::构造器2.5 数组::构造器 最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下方法引用。 方法引用 1. 为什么要用方法引用 1.1 lambda表达式冗余 在使用Lambda表达式的时候,也会出现代码冗余的情况,比如
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
JDK8主要新特性介绍(一)
1、语言新特性1.1接口新增默认方法与静态方法 1.1.1 Interface Default Method:For creating a default method in java interface, we need to use “default” keyword with the method signature. For example: package com.java8.d...
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
JDK8新特性 -- 方法引用
JDK8新特性 -- 方法引用JDK8新特性方法引用构造器引用类调用静态方法类调用非静态方法对象调用非静态方法 JDK8新特性 Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码...
【JavaSE之JDK8新特性】三万字详文带你了解JDK8新特性
1.了解了什么是lambda 表达式,lambda 表达式和匿名内部类的区别; 2.了解了默认方法是个啥,JDK8使得接口里也可以有静态方法了; 3.介绍了四个函数式接口,Supplier,Consumer,Function,Predicate; 4.方法引用的概念以及其中的语法格式; 5.引入了Stream流(遍历数据集的高级迭代器); 6.介绍了Stream的常用方法,学习了如何更好的处理数据
JDK1.8新特性
JDK1.8新特性,Lambda表达式,函数式接口,方法的引用,构造器的引用,Stream流API,接口的增强,Optional类,新的时间和日期API
JDK8新特性,方法引用的4种形式
JDK8新特性,方法引用的4种形式: 前提条件是:定义的接口中只能有一个方法,才能实现方法的引用。 引用静态方法: 类名::静态方法名 引用某个对象的方法: 对象::实例方法 引用特定类型的方法: 特定类::实例方法 引用构造方法: 类名::new 测试代码: package newjdk; public class Test04 { public static void main(String[] args) { // 引用静态方法
JDK8新特性--方法引用
在jdk8中新加入了方法引用的新特性目的是为了简化代码的书写,一般是搭配lambda表达式一起使用。下面我们来介绍一下方法引用的用法。
JDK8新特性之方法引用与构造器引用快速入门
对象实例::方法名、类名::静态方法名、类名::非静态方法名、类名::new、类型[]::new
Jdk8新特性
Java 8 (又称为 JDK 8或JDK1.8) 是 Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。
5339



被折叠的 条评论
为什么被折叠?



