Java Lambda循环推理

时间:2015-07-09 07:20:20

标签: java intellij-idea lambda

我有Java Lambda表达式的问题。我使用Spring 4,JdbcTemplate,Java 8. Intellij IDEA显示“循环推理”。它是什么以及如何解决它?谢谢你的关注。

@Override
public User getUser(long id) {
    return jdbcTemplate.query("SELECT * FROM user WHERE id = ?",
            ps -> {
                ps.setLong(1, id);
            },
            (rs, rowNum) -> {
                return new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getLong(4), rs.getBoolean(5));
            });
}

enter image description here

解决 此函数返回List,而不是User。正确的功能是:

@Override
public User getUser(long id) {
    return jdbcTemplate.query("SELECT * FROM user WHERE id = ?",
            ps -> {
                ps.setLong(1, id);
            },
            (rs, rowNum) -> {
                return new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getLong(4), rs.getBoolean(5));
            }).get(0);
}

1 个答案:

答案 0 :(得分:0)

@Override
public User getUser(long id) {
    return jdbcTemplate.query("SELECT * FROM user WHERE id = ?",
            ps -> {
                ps.setLong(1, id);
            },
            (rs, rowNum) -> {
                return new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getLong(4), rs.getBoolean(5));
            }).stream().findFirst().orElse(null);
}

或者您也可以使用.findAny而不是findFirst。