java - 如何在 Java 8 中的 lambda 调用中打印到控制台

标签 java lambda

我试图在 lambda 调用中打印到系统控制台,但它没有显示在输出窗口中(在 IDE 中以及作为 mvn test 运行时)

这是代码

public List<FieldDto> findField(String fieldKey) {
    jdbcTemplate.setQueryTimeout(10);
    System.out.println("\n\n\n\n ----------- seeeee  ----------------------");
    List<FieldDto> result = jdbcTemplate.query("select * from V_FIELD where FIELD_KEY = '" + fieldKey + "'",
            (rs, rowNum) -> getFieldDto(rs, rowNum)
    );
    System.out.println("\n\n\n\n ----------- done  ----------------------");
    return result;

}

并且方法 getFieldDto 定义为

private FieldDto getFieldDto(ResultSet rs, int rowNum) throws SQLException {
    FieldDto fieldDto = new FieldDto();
    System.out.println(" .. in getFieldDto:");
    try {
        fieldDto.FIELD_KEY = rs.getString("FIELD_KEY");
        fieldDto.CREATE_DATE = rs.getString("CREATE_DATE");

    } catch (Exception ex) {
        System.out.println(" exception getFieldDto:" + ex.getMessage());
        throw new RuntimeException(ex);
    }
    return fieldDto;
}

当我运行 jUnit 测试时,控制台确实显示 ---see--- 和 ----done---,控制台日志,但不是“.. in getFieldDto”

为什么没有发生这种情况,我如何在 Lambda 调用中打印

最佳答案

lambda 表达式使用单个方法创建匿名内部类的实例。创建时不会调用该方法。相反,它会在稍后的某个时刻作为回调被调用。

我相信您想立即调用该方法并将结果作为参数传递。所以就这么做吧!不要将调用包装在 lambda 表达式中:

List<FieldDto> result = jdbcTemplate.query("select * from V_FIELD where FIELD_KEY = '" + fieldKey + "'",
         getFieldDto(rs, rowNum));

此外,您应该非常小心连接字符串来创建 SQL 查询。如果您连接一个其值来自用户输入的字符串,这可能会使您的应用程序容易受到 SQL 注入(inject)攻击。相反,您应该在查询中使用类似 FIELD_KEY = ? 的语法,以及为 ? 占位符提供参数的适当 JDBC 调用。然后 JDBC 将清理所有输入以降低受到攻击的风险。

关于java - 如何在 Java 8 中的 lambda 调用中打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043630/

相关文章:

Java8 Stream 作为一个整体映射到一个 Function

java - 为什么Java的数字类不相互扩展?

java - Liferay 和 struts2

java - 无法连接到 FTPS 服务器

java - 在Linux 64位下使用Java实现串口工作

java - 模组制作,在屏幕上绘制东西时崩溃?

php - 如何在PHP中定义一个带参数且不闭包的回调并使用?

python - takeOrdered 函数中的 lambda 函数如何在 pySpark 中工作?

c++ - 将 lambda 放入类定义中的简洁方法

Java8 : how to copy values of selected fields from one object to other using lambda expression