Java Lambda 循环推理

标签 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

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

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

最佳答案

@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。

关于Java Lambda 循环推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310650/

相关文章:

java父级访问子级静态变量

java - Maven 中 Unresolved 依赖关系

java - 使用 `Error: Could not find or load main class` 运行 jar

c++ - 排序元素,但保持某些元素固定

java - 无法将内部类转换为 Lambda

java - 如何为使用 openssl 启动的 ssl 服务器单独维护 trutstore ..?

即使在 int 转换为 String 之后,Java 流也会给出 'incomparable types: int and String'

java - 入门过程 'command ' C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot\bin\java.exe''

c# - 如何使用 lambda 或 linq 从整数列表中的对象列表中收集多个 int 属性?

java - 比较 List<Map<String, String>> 和 List<Map<String, Object>> Java