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

时间:2014-09-08 15:22:05

标签: java java-8

我熟悉Java 8所谓的method references

两个问题:

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

List<String> food = Arrays.asList("apple", "banana", "mango", "orange", "ice");
food.forEach(System.out.println(String::toUpperCase));

2)是否存在类似于匿名函数参数(_)的内容,如Scala?

1 个答案:

答案 0 :(得分:4)

您要做的是将功能与消费者结合使用。

你可以这样做:

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);

如果你试图内联一行代码的第一个表达式,这会变得更加丑陋......