我想知道有没有办法简化以下代码?我试图通过使用EBean从数据库中获取一些东西.如果有什么东西然后将其映射到对象或以其他方式返回默认实现实例.
public static ObjectA test1() {

    Function<Optional<sqlRow>,ObjectA> sqlRowToObjectA= new Function<Optional<sqlRow>,ObjectA>() {
        @Override
        public AccountSummary apply(Optional<sqlRow> entry) {
            return entry.isPresent() ? new ObjectA(entry.get().getInt("id"),entry.get().getString("name"))
                 : ObjectA.EMPTY;
        }
    };

    return sqlRowToObjectA.apply(Optional.of(Ebean.createsqlQuery("select * from table1").findUnique()));
}

解决方法

您可以使用lambda而不是匿名类 – 并使用map获取所需的结果orElse作为默认值:
Function<Optional<sqlRow>,ObjectA> sqlRowToObjectA =
    entry -> entry.map(e -> new ObjectA(e.getInt("id"),e.getString("name")))
                  .orElse(ObjectA.EMPTY);

但是,在您的示例中,您根本不需要函数,并且可以重写整个方法,如下所示:

public static ObjectA test1() {
  sqlRow row = Ebean.createsqlQuery("select * from table1").findUnique();

  return Optional.ofNullable(row)
                 .map(e -> new ObjectA(e.getInt("id"),e.getString("name")))
                 .orElse(ObjectA.EMPTY);
}

请注意,因为findUnique可能返回null,所以应该使用Optional.ofNullable()而不是Optional.of():如果行为null,后者将抛出异常.

最后,我想补充一点,写它会更简单,更有效:

public static ObjectA test1() {
  sqlRow row = Ebean.createsqlQuery("select * from table1").findUnique();

  return row == null ? ObjectA.EMPTY
                     : new ObjectA(row.getInt("id"),row.getString("name"));
}

或者更改方法签名,让调用者决定在没有结果时该怎么做:

public static Optional<ObjectA> test1() {
  sqlRow row = Ebean.createsqlQuery("select * from table1").findUnique();

  return Optional.ofNullable(row)
                 .map(e -> new ObjectA(e.getInt("id"),e.getString("name")));
}

Java8可选函数链表达式的更多相关文章

  1. php – Laravel Eloquent查询生成器默认条件

    我想要的是如此类似于软删除功能.我看了文档,但我找不到任何有用的东西.此外,我试图在新闻模型的构造中处理它,但它也没有工作.谢谢.我通常会为此重写newQuery().newQuery()是Eloquent用于构造新查询的方法.现在你的News::all()只输出状态=1的新闻.

  2. PHP多进程的模式?

    存在哪种设计模式来实现一些PHP进程的执行以及在一个PHP进程中收集结果?

  3. php – CodeIgniter – 调用非对象上的成员函数select()

    我对CodeIgniter很新.这是我的代码:我在模型文件中收到这个错误:目前我使用CodeIgniter版本2.1.0.请帮帮我!

  4. php – 致命错误:无法在写入上下文中使用函数返回值

    页面代码都是html,它不会加载.这个错误:Fatalerror:Can’tusefunctionreturnvalueinwritecontextline142码:如果有一些PHP背后,问题可能是以这种方式调用一个函数为空($var):而不是这个你应该这样称呼它:或者更好(正如deceze指出的那样)问题还会导致其他类似的函数(isset,is_a,is_null等).

  5. regex – 当我在PowerShell中选择字符串(grep)时,如何只返回匹配的正则表达式?

    我试图找到一个文件中的模式。当我得到一个匹配使用Select-String我不想要整行,我只想要匹配的部分。有没有参数我可以用来做这个?例如:如果我这样做并且该文件包含以下行:我想得到一个只有1-2-3的结果,而不是整行得到返回。我想知道Powershell等价于grep-o大卫在正确的道路上。

  6. Zend Db避免了sql注入

    我是Zend_Db的主要开发人员,直到ZendFramework1.0.在您显示的示例中,值将插入到查询中,并应用适当的引号和转义.您不必再做任何事情了.在内部,它使用您正在使用的Zend_Db_Adapter的PHP扩展中内置的引用函数.例如.PDO::引用().

  7. 正则语言引擎:一个简单LEX和YACC结合运用的实例

    本文先描述了LEX与YACC的书写方法。然后利用LEX与YACC编写了一个简单正则语言的引擎,生成的中间语言为C语言。一个简单的yyerror可能是这样的:用LEX和YACC工具分析正则表达式正则语言的词法定义全集为ANCII码33-126的所有字符和空元符号有写出其词法分析器为简单测试RE的词法分析器正则表达式的语法规则可以用字母开头的字母数字串来作为标识符命名正则表达式。

  8. php – 致命错误:在pdo中的非对象上调用成员函数fetchAll()

    我是pdo的新手,只是尝试了下面这个并且发生了致命的错误.更改:至也在您发布的代码中:你有一个单引号内的表名.在MysqL中,您应该使用反引号代替表和列.

  9. 如何使用PHP函数筛选select nodeset?

    我想知道是否可以注册一个PHP用户空间功能与XSLT处理器,它不仅可以采取一个节点数组,还可以返回它?

  10. Ajax实现省市区三级级联(数据来自mysql数据库)

    实现该技术需要Java解析json技术整体Demo下载地址如下:点我下载address.htmlAddressServlet.javaAddressDao.javaAddressDaoImpl.java实体类Address.java

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部