java not present_Java 8的可选的function.ifPresent和if-not-present的功能风格?
对我来说@Dane White的答案是OK,首先我不喜欢使用Runnable,但我找不到任何替代品,这里另一个实现我喜欢更多
public class OptionalConsumer {
private Optional optional;
private OptionalConsumer(Optional optional) {
this.optional = optional;
}
public static OptionalConsumer of(Optional optional) {
return new OptionalConsumer<>(optional);
}
public OptionalConsumer ifPresent(Consumer c) {
optional.ifPresent(c);
return this;
}
public OptionalConsumer ifNotPresent(Runnable r) {
if (!optional.isPresent())
r.run();
return this;
}
}
然后 :
Optional o = Optional.of(...);
OptionalConsumer.of(o).ifPresent(s ->System.out.println("isPresent "+s))
.ifNotPresent(() -> System.out.println("! isPresent"));
更新1:
上面的解决方案为传统的开发方式,当你有价值,想要处理它,但如果我想定义的功能和执行,那么,检查下面的增强;
public class OptionalConsumer implements Consumer> {
private final Consumer c;
private final Runnable r;
public OptionalConsumer(Consumer c, Runnable r) {
super();
this.c = c;
this.r = r;
}
public static OptionalConsumer of(Consumer c, Runnable r) {
return new OptionalConsumer(c, r);
}
@Override
public void accept(Optional t) {
if (t.isPresent())
c.accept(t.get());
else
r.run();
}
}
然后可用作:
Consumer> c=OptionalConsumer.of(System.out::println, ()->{System.out.println("Not fit");});
IntStream.range(0, 100).boxed().map(i->Optional.of(i).filter(j->j%2==0)).forEach(c);
在这个新的代码,你有3件事:
>可以在存在对象之前定义功能容易。
>不为每个可选创建对象引用,只有一个,你有那么少的内存,那么少GC。
>它正在实现消费者以更好地使用其他组件。
现在它的名字更具描述性,它实际上是Consumer>
java not present_Java 8的可选的function.ifPresent和if-not-present的功能风格?相关推荐
- java.lang.ClassNotFoundException: net.sf.jsqlparser.expression.Function解决方法
[现象] 2022-07-25 11:59:51.707 [http-nio-7006-exec-3] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log ...
- webflow ajax,java开发之spring webflow实现上传单个文件及多个文件功能实例
本文实例讲述了java开发之spring webflow实现上传单个文件及多个文件功能.分享给大家供大家参考,具体如下: 上传单个文件 准备 1. 如果你项目中使用了spring security的话 ...
- [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...
- java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...
我正在编写一个可序列化的类,它接受几个参数,包括一个函数: public class Cls implements Serializable { private final Collection _c ...
- java电话号码输入_使用可选字母前缀屏蔽输入到电话号码格式
使用以下正则表达式: var phone_mask = /^[^0-9]*\+9{3}\s9\s9{3}\s9{4}$/; phone_mask.test("Phone: +999 9 99 ...
- java web 断点上传_使用WebUploader实现分片断点上传文件功能(二)
写在前面: 这几天,有去研究一下WebUploader上传文件,前面的博客有记录下使用WebUploader简单上传文件的例子,今天就把分片断点上传的例子也记录下吧,在博客园中,也查看了一些资料,基本 ...
- java 显示锁_Java 实现一个自己的显式锁Lock(有超时功能)
Lock接口 package concurency.chapter9; import java.util.Collection; public interface Lock { static clas ...
- 使用java、html5以及wPaint实现在线编辑图片并保存到FTP中的功能,在线图片为iis服务
文件准备wPaint 下载链接:https://download.csdn.net/download/xiaozukun/11097326 1.配置图片服务器,进入insertnet信息服务(iis) ...
- java整合消息推送_SpringMVC整合websocket实现消息推送及触发功能
本文为大家分享了SpringMVC整合websocket实现消息推送,供大家参考,具体内容如下 1.创建websocket握手协议的后台 (1)HandShake的实现类 /** *Project N ...
- java小程序知乎,微信小程序仿知乎实现评论留言功能
最近沉迷学习无法自拔,太久没有码字,码一个小程序留言功能实现.先上一波最后效果图: (删除按钮,是用户自己的留言时才会显示该按钮) 实现技术 后台:SSM框架 数据库:MySQL数据库 数据库设计 评 ...
最新文章
- 《数学之美》第3章 统计语言模型
- 关于大型asp.net 应用系统的架构 —— 如何做到高性能高可伸缩性[转]
- CVP(Critical Value Pruning)illustration with clear principle in details
- Thread.yield()
- Java jar 版本 查看
- 自如CEO熊林接任董事长
- java文件处理:文件流、上传、下载
- java 万年历_java万年历代码仅供参考
- 旅游信息管理系统的设计与实现
- 知乎高赞:哪些事坚持做3个月就会有巨大改变?
- STM32单片机实现二维码显示
- TCP、IP、链路层报文l结构
- 如何保持较长时间的专注
- R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)
- 运维老师傅:问题排查经验总结
- Java学习1-基本概念
- 除了Xshell,还有哪些趁手的Linux终端工具
- Office 2016安装失败解决方案
- C/C++ 代码分析警告
- 【商业数据分析】 CPC广告优化在复杂业务环境下需要考虑的要素