我有此代码,该代码有效:
new JdbcTemplate(new SingleConnectionDataSource(c, true))
.query("select id, name from PLAYERS", (rs, rowNum) ->
new Player(rs.getString("id"), rs.getString("name")) // oneline
);
但是我现在需要在新的Player()部分中添加多个语句。我尝试将它们括在方括号中,但似乎不起作用。正确的语法是什么?
谢谢。
我假设由此lambda表达式实现的功能接口的方法具有返回值,所以当使用方括号时,它应包括一个return语句,就像具有非空返回类型的任何方法一样。
new JdbcTemplate(new SingleConnectionDataSource(c, true))
.query("select id, name from PLAYERS", (rs, rowNum) ->
{
return new Player(rs.getString("id"), rs.getString("name");
})
);
不要这样做。在大多数情况下,在lambda
中具有多个语句是代码气味。而是使用两个参数创建一个方法:
private Player toPlayer(ResultSet rs, int rowNum) {
// multiple setters here
return player;
}
然后传递method reference
(实际上将表现为BiFunction
)而不是lambda
:
new JdbcTemplate(new SingleConnectionDataSource(c, true))
.query("select id, name from PLAYERS", this::toPlayer);
一个人可能想创建一个静态实用程序方法,而不是动态的方法。逻辑与上面相同:
public class MappingUtil {
// ...
public static Player toPlayer(ResultSet rs, int rowNum) {
// multiple setters here
return player;
}
}
然后:
new JdbcTemplate(new SingleConnectionDataSource(c, true))
.query("select id, name from PLAYERS", MappingUtil::toPlayer);