JDK8新特性:方法引用

静态方法引用

  • 类名 ::静态方法。

使用场景

  • 如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。

CompareByDate类

public class CompareByDate {public static int compareByAge(Student o1,Student o2){return o1.getAge() - o2.getAge();}
}

Test类

import java.util.Arrays;public class Test {public static void main(String[] args) {Student[] students = new Student[4];students[0] = new Student("张三",175.6,23);students[1] = new Student("李四",169,20);students[2] = new Student("王五",180.3,18);students[3] = new Student("赵六",165.9,25);// 原始写法,对数组中的学生对象按照年龄进行排序
//        Arrays.sort(students, new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return o1.getAge() - o2.getAge();
//            }
//        });// 使用Lambda简化后的形式//Arrays.sort(students,(o1,o2) -> o1.getAge() - o2.getAge());//Arrays.sort(students,(o1,o2) -> CompareByDate.compareByAge(o1,o2));//静态方法引用Arrays.sort(students,CompareByDate::compareByAge);System.out.println(students);}
}

实例方法的引用

  • 对象名 ::实例方法。

使用场景

  • 如果某个Lambda表达式里值是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。

CompareByDate类

public class CompareByDate {public int compareByAgeDesc(Student o1,Student o2){return o1.getAge() - o2.getAge();}
}

Test类

  • import java.util.Arrays;public class Test {public static void main(String[] args) {Student[] students = new Student[4];students[0] = new Student("张三",175.6,23);students[1] = new Student("李四",169,20);students[2] = new Student("王五",180.3,18);students[3] = new Student("赵六",165.9,25);// 原始写法,对数组中的学生对象按照年龄进行排序
    //        Arrays.sort(students, new Comparator<Student>() {
    //            @Override
    //            public int compare(Student o1, Student o2) {
    //                return o1.getAge() - o2.getAge();
    //            }
    //        });// 使用Lambda简化后的形式//Arrays.sort(students,(o1,o2) -> o1.getAge() - o2.getAge());//Arrays.sort(students,(o1,o2) -> CompareByDate.compareByAge(o1,o2));//实例方法引用CompareByDate compare = new CompareByDate();//Arrays.sort(students,((o1, o2) -> compare.compareByAgeDesc(o1,o2)));Arrays.sort(students,compare::compareByAgeDesc); // 降序System.out.println(students);}
    }

特定类型的方法引用

  • 类型 ::方法

使用场景

  • 如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该案例方法的入参的,则此时就可以使用特定类型的方法引用。
import java.util.Arrays;
import java.util.Comparator;public class Test {public static void main(String[] args) {String[] names = {"boby","angela","Andy","dlei","caocao","Babo","jack","Cici"};// 进行排序(默认是按照字符串的首字符编号进行升序排序的)//Arrays。sort(names);// 要求忽略首字符大小写进行排序
//        Arrays.sort(names, new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                // 制定比较规则
//                return o1.compareToIgnoreCase(o2);
//            }
//        });//Arrays.sort(names, ( o1,  o2) -> o1.compareToIgnoreCase(o2));Arrays.sort(names, String::compareToIgnoreCase);System.out.println(Arrays.toString(names));}
}

构造器引用

  • 类名 :: new

使用场景

  • 如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用

Student类

public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", 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;}
}

Test类

public class Test {public static void main(String[] args) {
//         addStudent ss = new addStudent(){
//            @Override
//            public Student addstudent(String name, int age) {
//                return new Student(name,age);
//            }
//        };//addStudent ss = ( name,  age) -> new Student(name,age);//构造器引用addStudent ss = Student::new;Student s = ss.addstudent("张三",18);System.out.println(s);}
}interface addStudent{Student addstudent(String name,int age);
}

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

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

相关文章

创建企业邮箱帐户指南:常见问题与解决方法分享

专业的电子邮件地址可以帮助客户识别商务人士&#xff0c;并了解公司给他们发邮件的目的。如果你从事管理、信息技术或人力资源工作&#xff0c;你可能会负责为一个企业建立一个企业邮箱帐户。了解如何为新员工和现有员工设置电子邮件帐户可以帮助您简化公司内部的沟通。 在这篇…

python中的tree

在Python中&#xff0c;常见的树的实现方式有以下几种&#xff1a; 二叉树&#xff08;Binary Tree&#xff09;&#xff1a;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。它们的区别在于二叉树没有严格的限制条件&#xff0c;可以是满二叉树、完全二叉树…

关于户口本等户籍材料翻译

户籍材料&#xff0c;作为证明公民户籍与身份的关键文件&#xff0c;在每个实施户籍制度的国家中均不可或缺。它们不仅是登记、变更或注销户籍的依据&#xff0c;更是多种生活场景中不可或缺的证明。举例来说&#xff0c;一个在国外出生的孩子若想在中国落户&#xff0c;就必须…

Linux 用户以及用户权限

一、用户管理 从用户的配置文件以及配置命令的方式来了解用户管理&#xff0c;命令也是将结果写入到配置文件 用户配置文件 不建议直接修改配置文件&#xff01;&#xff01;&#xff01; 账号 /etc/passwd 内容解析root:x:0:0:root:/root:/bin/bash用户名:密码:UID:GID:账…

LN和BN

假设batch为2&#xff0c;&#xff08;2&#xff0c;3&#xff0c;256&#xff0c;256&#xff09;这样的样本 LN比较直观就是在每个独立的样本上计算均值和方差&#xff0c;然后归一化。&#xff08;2&#xff0c;3&#xff0c;256&#xff0c;256&#xff09; 归一化是将数…

小H靶场笔记:DC-4

DC-4 January 4, 2024 2:37 PM Tags: teehee提权 Owner&#xff1a;只惠摸鱼 信息收集 探测靶机ip&#xff0c;发现应该是192.168.199.134 扫一下开放端口&#xff08;22、80&#xff09;、服务、版本、漏洞 根据扫描结果&#xff0c;在80端口可能有CSRF漏洞&#xff0c;…

石头剪刀布游戏 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 石头剪刀布游戏有 3 种出拳形状: 石头、剪刀、布。分别用字母 A,B,C 表示游戏规则: 出拳形状之间的胜负规则如下: A>B; B>C; C>A; 左边一个字母,表示相对优势形状。右边一个字母,表示相对劣势形状。…

Java里的Collections算法类

Collections算法类 Collections算法类里定义一系列用于操作集合的静态方法。 当谈到Java中的集合框架时&#xff0c;Collections 类是一个十分重要的类。它提供了一系列静态方法&#xff0c;用于操作和处理各种集合对象。 Java中的Collections类 Collections类是Java集合框架…

【SpringBoot系列】springboot中拦截器Interceptor使用

🤵‍♂️ 个人主页:@香菜的个人主页,加 ischongxin ,备注csdn ✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收…

vue项目中axios拦截器配置及不同接口对应不同后端接口域名配置

vue项目中axios拦截器配置及不同接口对应不同后端接口域名配置 一、axios基础配置二、不同接口对应不同后端接口域名配置 一、axios基础配置 import axios from axios import store from /store import { Message } from element-ui //创建axios实例 const service axios.cre…

使用 express 实现反向代理,解决跨域问题

反向代理是对服务器的代理&#xff0c;可以使用 express 实现反向代理&#xff0c;很简单&#xff0c;具体代码请参考 彻底理解前端安全面试题&#xff08;3&#xff09;—— CORS跨域资源共享&#xff0c;解决跨域问题&#xff0c;建议收藏&#xff08;含源码&#xff09;-CS…

AI:108-基于深度学习的通信干扰抑制技术研究

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

企语iFair 协同管理系统 任意文件读取漏洞复现(CVE-2023-47473)

0x01 产品简介 企语iFair协同管理系统是一款专业的协同办公软件,该管理系统兼容性强,适合多种企业类型。该软件永久免费,绿色安全,无需收取费用即可使用所有功能。企语iFair协同管理系统同时兼容了Linux、Windows两种操作系统 0x02 漏洞概述 企语iFair协同管理系统getup…

AE (4)_ 直方图调整的理论

#灵感# 在短暂的高通平台调试中&#xff0c;很看重直方图调整的理解。后来其它平台&#xff0c;不怎么调整这个了。但还是记录一下。 我个人还是倾向 招式简单&#xff0c;但应用到极致。 绝大部分内容来自&#xff1a;刘斯宁&#xff0c;Image Enhancement - CLAHE - 知乎 (z…

Mybatis源码基本原理--XML版

文章目录 mybatis是什么架构设计首先建立起Mapper的代理工程和代理映射器的注册和使用XML文件解析数据源解析、创建和使用SQL执行器&#xff08;Executor&#xff09;的定义与实现SQL解析参数处理器&#xff1a;策略模式实现封装处理结果注解 mybatis 是什么 MyBatis 是一款优…

SecOC中新鲜度值和MAC都按照完整的值来生成,但是在发送和认证的时候只会截取一部分。这边截取的部分一般取多长?由什么参数设定?

新鲜度值(Freshness Value, FV)和消息验证码(Message Authentication Code, MAC)是SecOC协议中用于保证数据的真实性和新鲜度的重要信息。它们的长度取决于不同的因素,如加密算法、安全级别、通信带宽等。 一般来说,FV和MAC的长度越长,安全性越高,但也会占用更多的通信…

IDEA 每次新建工程都要重新配置 Maven的解决方案

文章目录 IDEA 每次新建工程都要重新配置 Maven 解决方案一、选择 File -> New Projects Setup -> Settingsfor New Projects…二、选择 Build,Execution,Deployment -> Build Tools -> Maven IDEA 每次新建工程都要重新配置 Maven 解决方案 DEA 每次新建工程都要…

用大模型读取你的想法,并转化成文本!恐怖的DeWave模型

悉尼科技大学的科研人员&#xff0c;通过大语言模型、EEG&#xff08;大脑活动检测工具&#xff09;、脑机接口等技术&#xff0c;开发了一个可自动读取人类想法&#xff0c;并转化成文本的AI大模型——DeWave。 DeWave的使用方法非常简单&#xff0c;用户只需要戴上EEG&#…

vivo 互联网技术 2023 年度盘点

在龙年到来之际&#xff0c;vivo互联网技术2023年货如约而至&#xff0c;让我们一起盘点下vivo互联网技术在过去一年的成长与收获吧。 01 年度技术文章 2023年&#xff0c;vivo 互联网技术公众号共推送技术干货文章 70&#xff0c;我们根据文章阅读量等指标&#xff0c;精选出…

[书生·浦语大模型实战营]——书生·浦语大模型全链路开源体系

大模型成为发展通用人工智能的重要途径 书生浦语大模型开源历程 书生浦语模型性能 从模型到应用 应用例子&#xff1a;智能客服/个人助手/行业应用 实现流程&#xff1a; 开源开放体系&#xff1a; 1.数据——书生万卷 价值观对齐这个挺有意思嗷&#xff01; 2.预训练工具…