Java进阶13讲__第五讲

2024-08-28 10:12
文章标签 java 进阶 13 第五

本文主要是介绍Java进阶13讲__第五讲,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JDK8新特性-Lambda

1.认识Lambda 

 2.Lambda表达式的省略写法

进一步简化Lambda表达式的写法

 

package cn.hdc.oop5.lambda;import java.util.Arrays;
import java.util.Comparator;public class Test2 {public static void main(String[] args) {double[] price = {99.8, 128, 100};
//        Arrays.setAll(price, (int value) -> {
//            return price[value] * 0.8;
//        });/*** 参数类型可以省略不写* 如果只有一个参数,参数类型可以省略同时()也可以省略*/
//        Arrays.setAll(price, value -> {
//            return price[value] * 0.8;
//        });/*** 如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如* 果这行代码是return语句,也必须去掉return不写,*/Arrays.setAll(price, value -> price[value] * 0.8);System.out.println("-------------------------------------------------------");Student[] students = new Student[4];students[0] = new Student("蜘蛛精", 169.5, 23);students[1] = new Student("紫霞", 163.8, 26);students[2] = new Student("紫霞", 163.8, 26);students[3] = new Student("至尊宝", 167.5, 24);
//        Arrays.sort(students, new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return (int) (o1.getHeight() - o2.getHeight());
//            }
//        });
//        Arrays.sort(students, (Student o1, Student o2) -> {
//            return Double.compare(o1.getHeight(), o2.getHeight());
//        });
//        Arrays.sort(students, (o1, o2) -> {
//            return Double.compare(o1.getHeight(), o2.getHeight());
//        });Arrays.sort(students, (o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));}
}class Student {private String name;private double height;private int 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;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public Student(String name, double height, int age) {this.name = name;this.height = height;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", height=" + height +", age=" + age +'}';}
}

3.方法引用

Lambda表达式用来简化函数式接口的匿名内部类
方法引用进一步简化Lambda表达式
方法引用的标志性符号:“ :: 

1.静态方法的引用

package cn.hdc.oop5.staticMethod;import cn.hdc.oop5.lambda.Student;import java.util.Arrays;
import java.util.Comparator;public class Test {public static void main(String[] args) {Student[] students = new Student[4];students[0] = new Student("蜘蛛精", 169.5, 23);students[1] = new Student("紫霞", 163.8, 26);students[2] = new Student("紫霞", 163.8, 26);students[3] = new Student("至尊宝", 167.5, 24);Arrays.sort(students, (o1, o2) -> o1.getAge() - o2.getAge());Arrays.sort(students, (o1, o2) -> CompareByData.compareByAge(o1, o2));/*** 如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。*/Arrays.sort(students, CompareByData::compareByAge);}
}
package cn.hdc.oop5.staticMethod;import cn.hdc.oop5.lambda.Student;public class CompareByData {public static int compareByAge(Student s1, Student s2) {return s1.getAge() - s2.getAge();}
}

2.实例方法的引用

 

package cn.hdc.oop5.staticMethod;import cn.hdc.oop5.lambda.Student;import java.util.Arrays;
import java.util.Comparator;public class Test {public static void main(String[] args) {Student[] students = new Student[4];students[0] = new Student("蜘蛛精", 169.5, 23);students[1] = new Student("紫霞", 163.8, 26);students[2] = new Student("紫霞", 163.8, 26);students[3] = new Student("至尊宝", 167.5, 24);Arrays.sort(students, (o1, o2) -> new CompareByData().compareByHeight(o1, o2));/*** 如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用*/Arrays.sort(students, new CompareByData()::compareByHeight);}
}
package cn.hdc.oop5.staticMethod;import cn.hdc.oop5.lambda.Student;public class CompareByData {public int compareByHeight(Student s1, Student s2) {return (int) (s1.getHeight() - s2.getHeight());}
}

3.特定类型方法的引用

package cn.hdc.oop5.special;import java.util.Arrays;
import java.util.Comparator;public class specialImport {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));/*** 如果某个Lambda表达式里只是调用一个实例方法,* 并且前面参数列表中的第一个参数是作为方法的主调* 后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。*/Arrays.sort(names, String::compareToIgnoreCase);System.out.println(Arrays.toString(names));}
}

4.构造器的引用

package cn.hdc.oop5.constructor;public class constructorImport {public static void main(String[] args) {
//        CreateCar cc = new CreateCar() {
//            @Override
//            public Car create(String name, double price) {
//                return new Car(name, price);
//            }
//        };
//        CreateCar cc = (name, price) -> new Car(name, price);/*** 如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用*/CreateCar cc = Car::new;//构造器引用Car C = cc.create("BMW", 49.9);System.out.println(C);}
}interface CreateCar {Car create(String name, double price);
}
package cn.hdc.oop5.constructor;public class Car {private String name;private double price;@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price=" + price +'}';}public Car() {}public Car(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}

这篇关于Java进阶13讲__第五讲的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114472

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma