第14章总结:lambda表达式与处理

14.1: lambada表达式

14.1.1:lambada表达式简介

无参数

package fourteen;

interface SayhHi{

String say();//抽象方法接口

}

public class NoParamDemo {

public static void main(String\[\] args) {

//无参数

//利用匿名内部类补全方法体

SayhHi sh1 = new SayhHi() {

public String say() {

return "这是匿名内部类";

}

};

System.out.print(sh1.say());

}

}

使用表达式表达

System.out.print(sh1.say());

//利用lambda表达式补全方法体

SayhHi sh2 =() -> {

return "这是lambda表达式";

};

System.out.println(sh2.say());

}

}

有参数

使用表达式

package fourteen;

interface AddInt{

int add(int a,int b);//抽象方法接口

}

public class Prama {

public static void main(String\[\] args) {

//有参数

//利用匿名内部类补全方法体

AddInt ai1 = new AddInt() {

public int add(int a,int b){

return a+b;

}

};

System.out.println("匿名内部类:" + ai1.add(3, 5));

//利用lambda表达式补全方法体

AddInt ai2=( a, b) -> {

return a+b ;

};

System.out.println("lambda表达式:"+ai2.add(3, 5));

}

}

例题

package fourteen;

interface CheckGrade {

String check(int grade); // 查询成绩结果

}

public class GradeDemo {

public static void main(String\[\] args) {

CheckGrade g = (n) -> { // lambda实现代码块

if (n >= 90 && n <= 100) { // 如果成绩在90-100

return "成绩为优"; // 输出成绩为优

} else if (n >= 80 && n < 90) { // 如果成绩在80-89

return "成绩为良"; // 输出成绩为良

} else if (n >= 60 && n < 80) { // 如果成绩在60-79

return "成绩为中"; // 输出成绩为中

} else if (n >= 0 && n < 60) { // 如果成绩小于60

return "成绩为差"; // 输出成绩为差

} else { // 其他数字不是有效成绩

return "成绩无效"; // 输出成绩无效

}

}; // 不要丢掉lambda语句后的分号

System.out.println(g.check(89)); // 输出查询结果

}

}

//14.3

//使用方法的引用补全方法体

双冒号::

static int add(int x, int y) {//方法的引用,这是方法体的方法

return x+y;

}

static int add(int x, int y) {//方法的引用,这是方法体的方法

return x+y;

}

完整代码

package fourteen;

interface AddInt{

int add(int a,int b);//抽象方法接口

}

public class Prama {

static int add(int x, int y) {//方法的引用,这是方法体的方法

//对象也可以找到这个方法体,非静态

return x+y;

}

public static void main(String\[\] args) {

//有参数

//利用匿名内部类补全方法体

AddInt ai1 = new AddInt() {

public int add(int a,int b){

return a+b;

}

};

System.out.println("匿名内部类:" + ai1.add(3, 5));

//利用lambda表达式补全方法体

AddInt ai2=( a, b) -> {

return a+b ;

};

System.out.println("lambda表达式:"+ai2.add(3, 5));

//使用方法的引用补全方法体

AddInt ai3 = Prama::add;//找到类,找到方法体

System.out.println("方法体:"+ai3.add(3, 5));

}

}

例14.8

package fourteen;

import java.text.SimpleDateFormat;

import java.util.Date;

interface InstanceMethodInterface { // 创建测试接口

String method(Date date); // 带参数的抽象方法

}

public class InstanceMethodDemo {

public String format(Date date) { // 格式化方法

// 创建日期格式化对象,并指定日期格式

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

return sdf.format(date); // 返回格式化结果

}

public static void main(String\[\] args) {

// 创建类对象

InstanceMethodDemo demo = new InstanceMethodDemo();

// 引用类对象的方法

InstanceMethodInterface im = demo::format;

Date date = new Date(); // 创建日期对象

System.out.println("默认格式:" + date); // 输出日期对象默认格式

// 输出经过接口方法处理过的格式

System.out.println("接口输出的格式:" + im.method(date));

}

}//14.8

//调用构造器

package fourteen;

interface ConIn{

ConDemo action();//创建接口,正好是这个类的构造器类型,抽象方法

}

public class ConDemo {

//使用无参的构造方法补全方法体

public ConDemo() {//构造方法要写小括号

System.out.println("无参构造方法");//构造方法

}

public ConDemo(int a) {//构造方法要写小括号

System.out.println("有参构造方法");//构造方法

}

public static void main(String args\[\]) {

ConIn ci1 = ConDemo:: new;//new一个对象

ci1.action();//调用action方法

//使用有参数的方法来补全方法体

//ConDemo action(int a);

//ConIn ci1 = ConDemo:: new;//new一个对象

//ci1.action(5);//调用action方法

}

}

流:

static List<Employee> getEmpList() { // 提供数据初始化方法

List<Employee> list = new ArrayList<Employee>();

// 添加员工数据

list.add(new Employee("老张", 40, 9000, "男", "运营部"));

list.add(new Employee("小刘", 24, 5000, "女", "开发部"));

list.add(new Employee("大刚", 32, 7500, "男", "销售部"));

list.add(new Employee("翠花", 28, 5500, "女", "销售部"));

list.add(new Employee("小马", 21, 3000, "男", "开发部"));

list.add(new Employee("老王", 35, 6000, "女", "人事部"));

list.add(new Employee("小王", 21, 3000, "女", "人事部"));

return list;

stream接口

package fourteen;

import java.util.List;

import java.util.stream.Collectors;

import java.util.stream.Stream;

public class StreamDemo {

public static void main(String\[\] args) {

List<Employee> list=Employee.getEmpList();//从employee表拿到list表中的员工表

Stream<Employee> stream = list.stream();//调用list方法将表转换成流

//筛选年龄>30岁的员工

stream=stream.filter(sx-> sx.getAge()>30);//写条件,sx属于临时变量

//限制条数

stream = stream.limit(2);

List<Employee> result = stream.collect(Collectors.toList());//转成List链表

for (Employee sx : result) {//for循环输出结果

System.out.println(sx);

}

}

}

数据分组

package fourteen;

import java.util.List;

import java.util.Map;

import java.util.Set;

import java.util.stream.Collectors;

import java.util.stream.Stream;

public class GroupDemo {

public static void main(String\[\] args) {

// 分组

List<Employee> list=Employee.getEmpList();//从employee表拿到list表中的员工表

Stream<Employee> stream = list.stream();//调用list方法将表转换成员工流

Map<String,List<Employee>> map = //创建map集合存入,String代指dept,list链表指代map集合的value

stream.collect(Collectors.groupingBy(Employee::getDept));//利用流调用collect方法,分组方法,传入方法

Set<String> depts = map.keySet();//获取map集合中的部门表

for(String dept:depts){//for循环一个部门,depts代指部门

System.out.println(dept+"员工信息如下:");//输出信息

List<Employee> temp = map.get(dept);//分组列表输出

for(Employee g : temp){//temp是临时变量

System.out.println(g);//

}

System.out.println();

}

}

}

相关推荐
熊猫钓鱼>_>5 分钟前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
QianhangQianping27 分钟前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
海绵宝宝转agent32 分钟前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先
SunnyDays101133 分钟前
Java 操作 Word 脚注和尾注:添加、读取与删除
java·word
SunnyDays101135 分钟前
Java 为 Word 添加页码:隐藏封面页码、从指定页开始编号、奇偶页页码设置等
java·word·页码
octopus_c38 分钟前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
开源推荐官39 分钟前
多门店 O2O 商城选型复盘:从开发视角对比主流开源系统
java·架构·开源·php
吴名氏.40 分钟前
Java转AI Agent教程(第二周)超时重试与错误分类
java·人工智能·python·分类·ai agent
Eiceblue42 分钟前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
j7~1 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象