对我来说@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的功能风格?相关推荐

  1. 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 ...

  2. webflow ajax,java开发之spring webflow实现上传单个文件及多个文件功能实例

    本文实例讲述了java开发之spring webflow实现上传单个文件及多个文件功能.分享给大家供大家参考,具体如下: 上传单个文件 准备 1. 如果你项目中使用了spring security的话 ...

  3. [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)

    [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...

  4. java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...

    我正在编写一个可序列化的类,它接受几个参数,包括一个函数: public class Cls implements Serializable { private final Collection _c ...

  5. java电话号码输入_使用可选字母前缀屏蔽输入到电话号码格式

    使用以下正则表达式: var phone_mask = /^[^0-9]*\+9{3}\s9\s9{3}\s9{4}$/; phone_mask.test("Phone: +999 9 99 ...

  6. java web 断点上传_使用WebUploader实现分片断点上传文件功能(二)

    写在前面: 这几天,有去研究一下WebUploader上传文件,前面的博客有记录下使用WebUploader简单上传文件的例子,今天就把分片断点上传的例子也记录下吧,在博客园中,也查看了一些资料,基本 ...

  7. java 显示锁_Java 实现一个自己的显式锁Lock(有超时功能)

    Lock接口 package concurency.chapter9; import java.util.Collection; public interface Lock { static clas ...

  8. 使用java、html5以及wPaint实现在线编辑图片并保存到FTP中的功能,在线图片为iis服务

    文件准备wPaint 下载链接:https://download.csdn.net/download/xiaozukun/11097326 1.配置图片服务器,进入insertnet信息服务(iis) ...

  9. java整合消息推送_SpringMVC整合websocket实现消息推送及触发功能

    本文为大家分享了SpringMVC整合websocket实现消息推送,供大家参考,具体内容如下 1.创建websocket握手协议的后台 (1)HandShake的实现类 /** *Project N ...

  10. java小程序知乎,微信小程序仿知乎实现评论留言功能

    最近沉迷学习无法自拔,太久没有码字,码一个小程序留言功能实现.先上一波最后效果图: (删除按钮,是用户自己的留言时才会显示该按钮) 实现技术 后台:SSM框架 数据库:MySQL数据库 数据库设计 评 ...

最新文章

  1. 《数学之美》第3章 统计语言模型
  2. 关于大型asp.net 应用系统的架构 —— 如何做到高性能高可伸缩性[转]
  3. CVP(Critical Value Pruning)illustration with clear principle in details
  4. Thread.yield()
  5. Java jar 版本 查看
  6. 自如CEO熊林接任董事长
  7. java文件处理:文件流、上传、下载
  8. java 万年历_java万年历代码仅供参考
  9. 旅游信息管理系统的设计与实现
  10. 知乎高赞:哪些事坚持做3个月就会有巨大改变?
  11. STM32单片机实现二维码显示
  12. TCP、IP、链路层报文l结构
  13. 如何保持较长时间的专注
  14. R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)
  15. 运维老师傅:问题排查经验总结
  16. Java学习1-基本概念
  17. 除了Xshell,还有哪些趁手的Linux终端工具
  18. Office 2016安装失败解决方案
  19. C/C++ 代码分析警告
  20. 【商业数据分析】 CPC广告优化在复杂业务环境下需要考虑的要素

热门文章

  1. 读取配置文件五种方式
  2. 用Proxy进行预处理
  3. 开源移动安全测试框架MobSF安装过程踩过的那些坑(一)
  4. 6年专注,只因热爱——方创广告设计
  5. 关于Mysql group_concat的应用(把相同ID的VAL用字符'/'连接起来)
  6. 好搜独立,三分天下成历史
  7. 头条的_signature这个如何_如何彻底防止反编译,dex加密怎么做
  8. ES6变量的解构赋值注意点及用途(补充)
  9. vertical-align的使用及解决图片底部默认空白缝隙问题和图像与文本垂直方向居中对齐
  10. laravel sql_mode 严格模式