I am wondering is there a way to simplify the following code ? I am trying to get something from database by using EBean. If there's something then map it to an object or otherwise return the default implementation instance.
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()));
}
                You could use a lambda instead of an anonymous class - and use map to get the desired result + orElse for the default value:
Function<Optional<SqlRow>, ObjectA> sqlRowToObjectA =
    entry -> entry.map(e -> new ObjectA(e.getInt("id"), e.getString("name")))
                  .orElse(ObjectA.EMPTY);
However, in your example, you don't need a Function at all and could rewrite the whole method like this:
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);
}
Note that because findUnique may return null, you should use Optional.ofNullable() rather than Optional.of(): the latter will throw an exception if the row is null.
And finally, I would add that it would be simpler and more efficient to write:
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"));
}
or change the method signature and let the caller decide what to do if there is no result:
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")));
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With