建设租房信息网站,wordpress证优客,做网站都需要什么软件,wordpress如何评论如果您使用Java 8进行编码#xff0c;那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性#xff0c;因此建议尽可能使用方法引用替换lambda表达式#xff0c;但是#xff0c;最大的问题是#xff0c;您如何查找是否可以用方法引用替换lambda#xff1f; 是… 如果您使用Java 8进行编码那么您会知道使用方法引用代替lambda表达式会使您的代码更具可读性因此建议尽可能使用方法引用替换lambda表达式但是最大的问题是您如何查找是否可以用方法引用替换lambda 是的这并不是那么容易尤其是如果您仅使用Java 8几个月并且一直在努力将各种功能性编程概念和习惯用法整理在脑海中。 无论如何用方法引用替换lambda表达式的简单规则是建立在常识之上的您将在本文中学习。 如果仔细观察lambda就是传递给函数执行的代码。 如果您已经具有方法形式的代码则可以传递方法引用而不是将新代码作为lambda传递。 就是这样但是我知道说起来容易做起来难因此我提供了许多示例来解释Java 8中的这个概念。 如何用Java 8中的方法参考替换lambda表达式 如果您将lambda表达式用作匿名函数但不对传入的参数进行任何操作则可以将lambda表达式替换为方法引用。 下面的代码是用方法参考替换lambda的好例子 listOfNumbers.stream().sorted().forEach(number - {System.out.println(number);}
); 由于我们这里没有修改number参数因此可以替换lambda表达式 number - { System.out.println(number);
} 方法参考如下所示 listOfNumbers.stream().sorted.forEach(System.out::println); 但是如果您在将参数传递给另一个方法之前修改了该参数则无法用方法引用替换lambda例如在以下情况下我们无法这样做 listOfNumbers.stream().sorted().forEach(number - {System.out.println(String.valueOf(number));}
); 双冒号:)运算符用于方法引用实际上有三种主要用法 object::instanceMethod
Class::staticMethod
Class:instanceMethod 在前两种情况下方法引用等效于提供方法参数的lambda表达式例如 System.out :: println等效于 x- System.out.printlnx和 Math :: pow等效于 xy- Math.powxy。 在这种情况下第一个参数成为方法的目标。 例如 String :: compareToIgnoreCase与 (x, y) - x.compareToIgnoreCase(y) 或this :: equals与 (x - this.equals(x)) 您可以阅读有关在Java SE 8中将这种类型的lambda表达式转换为方法参考的更多信息有关Really Im Patient的内容 对此主题有更多的解释和示例。 用方法引用替换lambda表达式的另一个很好的示例是以下代码该代码在Java 8中按值对映射进行排序 Map sortByValue map.entrySet()
.stream()
.sorted(Map.Entry.String, IntegercomparingByValue())
.collect(Collectors.toMap(e - e.getKey(),e - e.getValue())); 可以使用方法参考重写为以下内容 Map sortByValue map.entrySet()
.stream()
.sorted(Map.Entry.String, IntegercomparingByValue())
.collect(toMap(Map.Entry::getKey,Map.Entry::getValue, (e1, e2) - e1, LinkedHashMap::new)); 如果您仔细观察我们将e- e.getKey替换为 Map.Entry :: getKey和e- g.getValue到 Map.Entry :: getValue因为我们已经以getKey和getValue方法的形式编写了这些lambda表达式所执行的代码。 这就是何时以及如何用Java 8中的方法引用替换lambda表达式的全部内容。 仅在不进行任何修改的情况下才可以替换否则就不能替换。 为什么要这么做 好吧因为方法引用比lambda表达式更简洁易读。 Java 8的新增功能 Java SE 8实在不耐烦 使用Lambda表达式从Java 8中的集合到流 Java 8中用于数据处理的流收集器和可选项 相关的Java 8教程 如果您有兴趣学习有关Java 8的新功能的更多信息这是我以前的文章介绍Java 8的一些重要概念 Java 8中20个日期和时间的示例 教程 从零开始学习Java 8的5本书 书籍 如何在Java 8中连接String 示例 如何在Java 8中使用filter方法 教程 如何在Java 8中使用LocalDateTime格式化/解析日期 教程 如何在Java 8中使用Stream类 教程 如何在Java 8中使用forEach方法 示例 如何在Java 8中将列表转换为Map 解决方案 如何在Java 8中使用peek方法 示例 如何在Java 8中按键对地图排序 示例 Java 8中的Optionals的10个示例 示例 感谢您到目前为止阅读本文。 如果您喜欢这篇文章请与您的朋友和同事分享。 如果您有任何问题或反馈请发表评论。 翻译自: https://www.javacodegeeks.com/2017/08/convert-lambda-expression-method-reference-java-8.html