Java,方法参考 - 如何打印列表值

问题描述

我有以下清单。我想使用 lambda 和方法引用打印值。 第一个 lambda 表达式有效,但我不知道如何使用方法引用打印值,因为我收到编译错误

List<String> letters = Arrays.asList("a","b","c");

System.out.println("Lambda upperCase forEach");
letters.forEach(l -> System.out.println(l.toupperCase))); //it works

System.out.println("Method Reference upperCase forEach");
letters.forEach(System.out::println(String::toupperCase)));  //compilation error

如何使用方法引用打印值?

解决方法

使用方法引用时,不能传递参数化参数。而是尝试先将值转换为大写,然后打印如下值,

letters.stream().map(String::toUpperCase).forEach(System.out::println);

map 方法将值转换为大写,forEach 方法将打印值。

,

虽然我实际上更喜欢上面 Vimukthi_R 的回答,但这里有一个替代方案。 您可以创建自己的函数,该函数接受一个字符串并调用 toUpperCase 然后 println,然后将您的函数名称作为方法引用名称:

Java 中的底线,方法引用不带参数,实际上甚至不带空参数列表。 ()

public class Example {
    public static void printUpperCase(String s)
    {
        System.out.println(s.toUpperCase());
    }
    public static void main(String[] args) {
        Arrays.asList("a","b","c").forEach(Example::printUpperCase);
    }
}
,
letters.forEach(System.out::println(String::toUpperCase));

不编译,因为方法引用隐式接受参数,如果它们引用的方法定义了这样的参数,并且你不能显式传递它们。

即使允许显式参数,PrintStream 中的 println() 重载都不会将另一个方法引用作为参数。

letters.stream()
    .map(String::toUpperCase)
    .forEach(System.out::println);

会:

  1. 从您的 letters 中获取流对象;
  2. 将流对象映射到它们各自的对象ს(将其视为流管道中对象的转换);
  3. 最后,将流的每个元素传递给方法,由 System.out::println 引用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...