网站建设旗舰品牌,软件开发一个月多少工资,商丘百度推广,chmod wordpressJava 8彻底改变了Java。 它很可能是过去10年中最重要的Java版本。 有很多新功能#xff0c;包括默认方法#xff0c;方法和构造函数引用以及lambda#xff0c; 仅举几例 。 更有趣的功能之一是新的java.util.stream API#xff0c;正如Javadoc所述#xff0c;该API支持 … Java 8彻底改变了Java。 它很可能是过去10年中最重要的Java版本。 有很多新功能包括默认方法方法和构造函数引用以及lambda 仅举几例 。 更有趣的功能之一是新的java.util.stream API正如Javadoc所述该API支持 元素流上的函数式操作例如集合上的map-reduce转换 将此新API与lambda表达式结合使用您将获得简洁但功能强大的语法该语法可通过应用投影显着简化代码。 以表面上简单的过滤集合为例。 在这种情况下将创建一个简单的Message类型Collection 如下所示 创建消息集合 ListMessage messages new ArrayList();
messages.add(new Message(aglover, foo, 56854));
messages.add(new Message(aglover, foo, 85));
messages.add(new Message(aglover, bar, 9999));
messages.add(new Message(rsmith, foo, 4564)); 通过这个集合我想过滤出Message 其delay 第3个构造函数参数大于3,000秒。 在Java 8之前 您可以像这样手动阻塞这种逻辑 过滤旧派风格 for (Message message : messages) {if (message.delay 3000) {System.out.println(message);}
} 但是在Java 8中此工作变得更加简洁。 集合现在支持stream方法该方法将基础数据结构转换为可迭代的对象流从而允许使用lambda表达式的新型功能操作。 这些操作大多数也可以链接在一起。 这些可链接的方法称为“ 中间” 不能链接的方法称为“ 终端” 。 简而言之lambda表达式与匿名类非常相似只是语法更少 。 例如如果您在Javadocs中查找Stream的filter方法的参数则会看到它采用了Predicate类型。 但是您不必像在使用匿名类的Java 8之前那样实现该接口。 因此用于过滤所有大于3000的delay值的Predicate lambda表达式为 Lambda表达式 x - x.delay 3000 其中 x是为流中的每个值传递的参数 -右边的所有内容都是要求值的表达式。 将所有这些放到Java 8中可以得出 流lambdas messages.stream().filter(m - m.delay 3000).forEach(item - System.out.println(item)); 有趣的是由于Java 8的其他一些新功能 forEach的lambda可以进一步简化为 流lambda更短 messages.stream().filter(m - m.delay 3000).forEach(System.out::println); 因为forEach lambda的参数仅由println 所以Java 8现在允许您完全删除该参数。 之前我提到过流允许您链接lambda-在上述情况下 filter方法是一种中间方法而forEach是一种终端方法。 功能程序员可以立即识别的其他中间方法是 map flatMap和reduce 仅举几例。 详细地说我想查找所有延迟超过3,000秒的Message 并总结总延迟时间。 没有功能魔术我可以写 普通的Java long totalWaitTime 0;
for (Message message : messages) {if (message.delay 3000) {totalWaitTime message.delay;}
} 不过使用Java 8和一些function-foo您可以实现更优雅的代码构造如下所示 Java 8优雅 long totWaitTime messages.stream().filter(m - m.delay 3000).mapToLong(m - m.delay).sum(); 请注意我如何链接filter和mapToLong方法以及终端sum 。 顺便说一句 sum方法需要一种特定的地图样式方法该方法可产生基本类型的集合例如mapToLong mapToInt等。 功能样式编程作为一种核心语言功能是一种非常强大的结构。 而且尽管许多技术在诸如Guava之类的各种第三方库中以及诸如Scala和Groovy之类的JVM语言中已经可用但拥有这些语言核心的这些功能肯定会吸引更多的开发人员并对开发前景产生最大的影响。 毫无疑问Java 8极大地改变了Java语言 。 翻译自: https://www.javacodegeeks.com/2014/03/java-8s-functional-fomentation.html