Java8:将方法引用传递给另一个方法

Java8:将方法引用传递给另一个方法,java,java-8,Java,Java 8,我熟悉Java8所谓的方法引用 两个问题: 1) 我想打印大写的值。如何将String::toUpperCase的结果传递给println?例如,此代码块不编译: List<String> food = Arrays.asList("apple", "banana", "mango", "orange", "ice"); food.forEach(System.out.println(String::toUpperCase)); List food=array.asList(“苹果

我熟悉Java8所谓的
方法引用

两个问题:

1) 我想打印大写的值。如何将
String::toUpperCase
的结果传递给
println
?例如,此代码块不编译:

List<String> food = Arrays.asList("apple", "banana", "mango", "orange", "ice");
food.forEach(System.out.println(String::toUpperCase));
List food=array.asList(“苹果”、“香蕉”、“芒果”、“橙子”、“冰”);
food.forEach(System.out.println(String::toUpperCase));

2) 是否有类似于Scala这样的匿名函数参数(
)的东西?

您要做的是将函数与使用者结合起来

您可以这样做:

food.stream().map(String::toUpperCase).forEach(System.out::println);
或者,您可以使用lambda表达式:

food.forEach(x->System.out.println(x.toUpperCase()));

除了这些直截了当的方法外,您还可以组合函数来创建新函数,但不能创建具有使用者的函数,但是,使用以下奇怪的代码,您可以做到这一点:

Function<String,String>     f0=String::toUpperCase;
food.forEach(f0.andThen(" "::concat).andThen(System.out::append)::apply);
函数f0=String::toUpperCase;
food.forEach(f0.和第(“::concat.)和第(System.out::append)::apply);

如果您尝试将第一个表达式内联到一行程序中,这会变得更加丑陋…

您要做的是将函数与使用者结合起来

您可以这样做:

food.stream().map(String::toUpperCase).forEach(System.out::println);
或者,您可以使用lambda表达式:

food.forEach(x->System.out.println(x.toUpperCase()));

除了这些直截了当的方法外,您还可以组合函数来创建新函数,但不能创建具有使用者的函数,但是,使用以下奇怪的代码,您可以做到这一点:

Function<String,String>     f0=String::toUpperCase;
food.forEach(f0.andThen(" "::concat).andThen(System.out::append)::apply);
函数f0=String::toUpperCase;
food.forEach(f0.和第(“::concat.)和第(System.out::append)::apply);

如果您尝试为一行程序内联第一个表达式,这会变得更糟糕…

什么意思,“方法引用的结果?”
println
是一个无效的方法,因此显然您不能将其结果传递给
forEach
。我想打印大写值。所以我想将toUpperCase与println“Nice”结合起来,以便在没有解释的情况下获得否决票。你说的“方法引用的结果”是什么意思?
println
是一个无效的方法,因此显然你不能将其结果传递给
forEach
。我想打印大写的值。所以我想将toUpperCase与println“Nice”结合起来,以便在没有任何解释的情况下获得否决票。
流是组合任意操作的方式。
可能是您不想在未来Java版本中使用的参数的占位符,这不适用于此处使用的参数。
流是组合任意操作的方式。
可能是您不希望在未来Java版本中使用的参数的占位符,但是,这不适用于此处使用的参数。