Java8:将方法引用传递给另一个方法
我熟悉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(“苹果
方法引用
两个问题:
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版本中使用的参数的占位符,但是,这不适用于此处使用的参数。