多行lambda

问题描述 投票:2回答:2

我有此代码,该代码有效:

  new JdbcTemplate(new SingleConnectionDataSource(c, true))
        .query("select id, name from PLAYERS", (rs, rowNum) ->
            new Player(rs.getString("id"), rs.getString("name")) // oneline
        );

但是我现在需要在新的Player()部分中添加多个语句。我尝试将它们括在方括号中,但似乎不起作用。正确的语法是什么?

谢谢。

java java-8 functional-interface
2个回答
2
投票

我假设由此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");
        }) 
    );

-2
投票

不要这样做。在大多数情况下,在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);
© www.soinside.com 2019 - 2024. All rights reserved.