【问题标题】:How to print List of String array array using lambda in Java [closed]如何在 Java 中使用 lambda 打印字符串数组列表 [关闭]
【发布时间】:2021-07-16 20:16:52
【问题描述】:

这是我的代码:

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 打印包含字符串数组的列表。提前谢谢你。

【问题讨论】:

  • 嗯,是什么阻碍了你的 lambda?你尝试了什么?什么不工作?
  • 我正在尝试在 lambda 中使用 r[0], r[1] 但它不起作用。不知道如何从 r 中获取数据。

标签: java java-8 java-11


【解决方案1】:

要将 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) -&gt; { statements; } 形式的 lambda 几乎等同于以下形式的方法:

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

当遇到 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)

【讨论】:

  • @AlexRudenko:谢谢,连接的字符串是从问题中逐字复制的:)
【解决方案2】:
salaries.stream()
        .map(salary -> String.format("User name: %s -- Salary: %s", salary[0], salary[1]))
        .forEach(System.out::println);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多