如何在 Java 中使用 lambda 打印字符串数组列表

How to print List of String array array using lambda in Java

这是我的代码:

List<String[]> salaries = getSalariesByMonth();

//I am using the old way to print the data
for (String[] obj : rates) {
    System.out.println("User name: "obj[0]+"--"+"Salary: "+obj[1]);   //obj[0] is NAME,  obj[1] is SALARY
}

//I am trying to use this way to print the data but unable to do so.
salaries.forEach(s-> System.out.println("print NAME and SALARY"));

如何使用 Lambda 打印包含字符串数组的列表。提前谢谢你。

要将 for-each 循环转换为 forEach 调用,一般模式为:

for (final var x : xs) {
  statements;
}
// becomes:
xs.forEach(x -> { statements; });
// with a single statement, braces are optional:
xs.forEach(x -> statement);

(x, y) -> { statements; } 形式的 lambda 大部分等同于以下形式的方法:

… yourMethod(final … x, final … y) {
  statements;
}

Return 类型和参数类型在遇到 lambda 时由编译器自动推断。


所以在你的情况下是:

salaries.forEach(obj -> System.out.println("User name: "+obj[0]+"--"+"Salary: "+obj[1]));

您还可以使用流首先将每个对象映射到字符串表示形式,然后在终端操作中输出每个项目:

salaries.stream()
        .map(obj -> "User name: "+obj[0]+"--"+"Salary: "+obj[1])
        .forEach(s -> System.out.println(s));

由于 System.out.println 只需要一个与 lambda 参数匹配的参数,因此可以将其替换为 method reference,这在某些情况下更具可读性:.forEach(System.out::println)

salaries.stream()
        .map(salary -> String.format("User name: %s -- Salary: %s", salary[0], salary[1]))
        .forEach(System.out::println);