您可以使用lambda而不是匿名类 – 并使用map获取所需的结果orElse作为默认值:
Function,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 test1() {
sqlRow row = Ebean.createsqlQuery("select * from table1").findUnique();
return Optional.ofNullable(row)
.map(e -> new ObjectA(e.getInt("id"),e.getString("name")));
}