可以将lambda表达式中的元素完成的操作链接/连接起来,如下所示:
list.forEach(s -> {
System.out.println(s.toLowerCase());
System.out.println(s.toUpperCase());
});
有没有办法通过方法引用来做到这一点?像这样:
list.forEach({
System.out::println(String::toLowerCase);
System.out::println(String::toCase);
});
我知道我可以在四个单独的调用中执行此操作(它们也可以执行更多操作,即更改值):
list.replaceAll(String::toLowerCase);
list.forEach(System.out::println);
list.replaceAll(String::toUpperCase);
list.forEach(System.out::println);
我什至不能做这样简单的事情:
list.forEach({
System.out::println;
System.out::println;
});
通过功能接口的默认方法可以链接。但是“问题”在于,当您返回合成表达式的右侧时,推理引擎没有足够的信息来确定左侧是相同的功能接口。
要提供该信息,您必须强制转换语句:
List<String> l = Collections.emptyList();
l.forEach(((Consumer<String>)System.out::println).andThen(System.out::println));
或先将其分配给变量:
Consumer<String> cons = System.out::println;
Collections.<String>emptyList().forEach(cons.andThen(System.out::println));
或者,您也可以编写可以执行所需操作的静态帮助器方法
Collections.<String>emptyList().forEach(combine(System.out::println, System.out::println));
static <T> Consumer<T> combine(Consumer<T>... consumers) {
// exercise left to the reader
}
问题内容: 我对“引用特定类型的任意对象的实例方法”背后的概念感到困惑。Oracle 文档提供了有关此示例: 我为这种方法参考所见的大多数示例都是这样的:如果lambda是like,那么您可以编写like 。文档中的示例说: 方法参考String :: compareToIgnoreCase的等效lambda表达式将具有形式参数列表(字符串a,字符串b),其中a和b是用于更好地描述此示例的任意名称
我对“引用特定类型的任意对象的实例方法”背后的概念感到困惑。Oracle留档有一个例子: 我看到的这种方法参考的大多数示例是这样的:如果lambda像:
问题内容: 在Java中,lambda是否可以接受多种不同类型? 即:单个变量起作用: Varargs也可以工作: 但是我想要可以接受许多不同类型参数的东西,例如: 为了方便起见,主要用途是在函数内部具有小的内联函数。 我环顾了Google并检查了Java的Function Package,但找不到。这可能吗? 问题答案: 如果使用多个类型参数定义这样的功能接口,则是可能的。没有这样的内置类型。(
我是kotlin的新手。我有一个带有2个重载方法的java类。一个接受一个函数,另一个接受两个 和 现在在kotlin中,我尝试使用两个参数调用版本(如java中): 但我得到编译错误。 Kotlin:意外标记(使用“;”在同一行上分隔表达式) 正确的语法是什么?
问题内容: 这是我的方案: 我必须调用一个方法。假设参数为:Parameter1,Parameter2,..,..,Parameter N,但是要发送给该方法的参数在每种情况下都可能会更改。 情况1: 仅发送参数 1 情况2: 发送参数的组合 情况3: 发送所有参数 用Java实现此目标的最佳方法是什么? 问题答案: 解决方案取决于问题的答案-所有参数是否都将是同一类型,如果是,则每个参数将被视为
问题内容: 从spring文档中: 如何指定使用和作为密钥? 问题答案: 如果没有另外指定,当前的Spring缓存实现将所有方法参数用作缓存键。如果要使用选定的键,请参考 Arjan的答案,该答案使用SpEL列表,这是创建唯一键的最简单方法。 从Spring文档 随着Spring 4.0的发布,默认的密钥生成策略发生了变化。Spring的早期版本使用密钥生成策略,该策略对于多个密钥参数仅考虑参数的