Java8中怎么实现函数入参
发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,今天就跟大家聊聊有关Java8中怎么实现函数入参,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 前情回顾Java8支持将函数作为参数传递到
千家信息网最后更新 2025年01月29日Java8中怎么实现函数入参
今天就跟大家聊聊有关Java8中怎么实现函数入参,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. 前情回顾
Java8支持将函数作为参数传递到另一个函数内部,在第一篇学习笔记中也简单提到了这个用法。但是在第一篇学习的时候,还是困惑的,先说下我的困惑。
在第一篇中提到函数入参,入参的类型要先定义一个接口:
public interface Predicate{ boolean test(T t);}
然后定义一个函数如下:
public static ListfilterApples(List inventory,Predicate predicate){ List result = new ArrayList<>(); for(Apple apple:inventory){ if(predicate.test(apple)){ result.add(apple); } } return result;}
最后调用该方法:
ListfilterGreenApples= filterApples(originApples,Apple::isGreenApple);
这里问题就来了,入参类型是一个接口Predicate,那实际入参不应该是这个接口的实现类的对象吗,为什么直接就传了这个静态方法呢?
带着这个问题,开始再继续学习一下函数入参这块内容。
2. 继续学习
要理清函数作为参数传递这块内容,还得先从最简单的实现看起。在学习设计模式的时候,有了解过策略模式。第一个文章苹果那个demo为例,加上策略模式。
首先定义一个接口,后面实现的所有策略都基于该接口:
public interface ApplePredicate{ boolean test(T t);}
接着实现两个筛选苹果的策略:一个是根据颜色进行筛选,另一个是根据重量进行筛选:
public class filterAppleByColorPredicate implements Predicate{ @Override public boolean test(Apple apple) { return "green".equals(apple.getColor()); }}public class filterAppleByWeightPredicate implements Predicate { @Override public boolean test(Apple apple) { return apple.getWeight() > 15; }}
最后main方法实现如下:
public static void main(String[] args){ Listinventory = ...; // 选择根据颜色过滤的策略过滤 ApplePredicate colorPredicate = new filterAppleByColorPredicate(); filterApples(inventory,colorPredicate); // 选择根据重量过滤的策略过滤 ApplePredicate weightPredicate = new filterAppleByWeightPredicate(); filterApples(inventory,weightPredicate); }public static List filterApples(List inventory,ApplePredicate predicate){ List result = new ArrayList<>(); for(Apple apple:inventory){ if(predicate.test(apple)){ result.add(apple); } } return result;}
这样就实现了一个基于策略模式的代码。
3. 匿名类
在第二小节的基础上,直接使用匿名类,省去了各种策略的实现类的定义:
filterApples(inventory,new ApplePredicate() { public boolean test(Apple apple){ return "green".equals(apple.getColor()); }});
4. Lambda表达式
第三小节使用匿名类,但是当代码量多了以后,还是显得累赘,为此引入Lambda表达式来简化编写:
filterApples(inventory,(Apple apple) -> "green".equals(apple.getColor()));
关于Lambda这里我还是有疑问的,假如接口定义了两个方法:
public interface ApplePredicate{ boolean test(T t); boolean test2(T t);}
看完上述内容,你们对Java8中怎么实现函数入参有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
函数
策略
接口
内容
学习
方法
模式
还是
困惑
两个
代码
参数
小节
时候
类型
苹果
表达式
重量
问题
颜色
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发和定制嘉兴
湖北工程学院网络安全专业
戴尔服务器bios怎么退出
存储服务器怎么以管理员登录
安卓开发城市数据库
济南app软件开发公司排行
迷你ftp服务器绿色
软件开发需要几张表
服务器双显卡
韩国的软件开发创业者
专科生学计算机网络技术好不好
mohist服务器特点
云弹性云服务器
csv表格能导入数据库吗
数据库服务器连接管理工具
pop3对服务器邮件的默认操作
莹石云无法连接到服务器
格格家网络技术有限公司
dell服务器idrac改网口
数字一网络技术有限公司
二手服务器主板cpu
it网络技术都应该会什么
力控如何把报警存入数据库
设计一个数据库食堂
核电厂网络安全技术政策
电脑服务器怎么做
cf出现服务器断开连接
linux 连接服务器
信威1.8g网络技术
vivo天气用的是什么的数据库