Java8可选函数链表达式
发布时间:2020-12-14 06:01:06 所属栏目:Java 来源:网络整理
导读:我想知道有没有办法简化以下代码?我试图通过使用EBean从数据库中获取一些东西.如果有什么东西然后将其映射到对象或以其他方式返回默认实现实例. public static ObjectA test1() { FunctionOptionalSqlRow,ObjectA sqlRowToObjectA= new FunctionOptionalSql
我想知道有没有办法简化以下代码?我试图通过使用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"))); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读