编程语言
首页 > 编程语言> > java – 方法引用vs lambda表达式

java – 方法引用vs lambda表达式

作者:互联网

我想通过以下示例中的方法引用替换lambda表达式:

 public class Example {

        public static void main(String[] args) {
            List<String> words = Arrays.asList("toto.", "titi.", "other");
         //lambda expression in the filter (predicate)
            words.stream().filter(s -> s.endsWith(".")).forEach(System.out::println);
        }
   }

我想写一下这样的东西:

words.stream().filter(s::endsWith(".")).forEach(System.out::println);

是否可以将任何lambda表达式转换为方法引用.

解决方法:

没有办法“将任何lambda表达式转换为方法引用”,但您可以为特定目标类型实现工厂,如果这样可以满足重复需求:

public static <A,B> Predicate<A> bind2nd(BiPredicate<A,B> p, B b) {
    return a -> p.test(a, b);
}

有了这个,你可以写

words.stream().filter(bind2nd(String::endsWith, ".")).forEach(System.out::println);

但实际上,没有优势.从技术上讲,lambda表达式完全符合您的要求,它是最小的必要参数转换代码,表示为lambda表达式的主体,编译为合成方法和对该合成代码的方法引用.语法
s – > s.endsWith(“.”)也已经是表达该意图的最小语法.我怀疑你能找到一个仍然与Java编程语言的其余部分兼容的小构造.

标签:method-reference,java,java-8,lambda
来源: https://codeday.me/bug/20190823/1702671.html