我熟悉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?
答案 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);
如果你试图内联一行代码的第一个表达式,这会变得更加丑陋......