【问题标题】:Java Lambda Cyclic inferenceJava Lambda 循环推理
【发布时间】:2015-07-09 07:20:19
【问题描述】:

我对 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));
            });
}

已解决 此函数返回列表,而不是用户。正确的功能是这样的:

@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);
}

【问题讨论】:

  • 缺少截图:D
  • 你有什么 IntelliJ 版本?
  • IntelliJ IDEA 14 Ultimate
  • 看来,你已经采取了危险的回归方式。如果没有对象,则必须抛出空指针。我觉得这种方式安全舒适:list.stream().findFirst().orElse(null);

标签: java intellij-idea lambda


【解决方案1】:
@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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2020-07-11
    相关资源
    最近更新 更多