技术中心

这里象征着我们的态度和能力

>介绍的Java 8新特点
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-09-14      浏览次数:9838
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
    Java 8将支持Lambda功能,尽管该规范还在不断的变化,但是Java 8的开发版已经实现了对Lambda的支持。本文章将带你熟悉Lambda 语法,以及使用集合API 中的Lambda 以及相关的语言增强,本文所有的代码都是在JDK 8 Lambda build b39 编译。
   
    功能接口:只包含一个方法的接口被称为功能接口,Lambda 表达式用用于任何功能接口适用的地方。函数集合:Java 8 的类库包含一个新的包java.util.functions ,这个包中有很多新的功能接口,这些接口可与集合API 一起使用。
   
    java.util.functions.Predicate;
   
    使用谓词(Predicate) 来筛选集合:
   
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
   
    List<String> filteredNames = names.filter(e -> e.length() >= 4) .into(new ArrayList<String>());
   
    for (String name : filteredNames) {
   
    System.out.println(name);  }
   
    这里我们有两个新方法:
   
    Iterable<T> filter(Predicate<? super T>) 用于获取元素满足某个谓词返回true 的结果
   
    <A extends Fillable<? super T》 A into(A) 将用返回的结果填充ArrayList
   
    java.util.functions.Block我们可使用一个新的迭代器方法来替换for 循环void forEach(Block<? super T>):
   
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
   
    names .filter(e -> e.length() >= 4)
   
    .forEach(e -> { System.out.println(e); });
   
    forEach() 方法是internal iteration 的一个实例:迭代过程在Iterable 和Block 内部进行,每次可访问一个元素。
   
    最后的结果就是用更少的代码来处理集合:
   
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
   
    names.mapped(e -> { return e.length();
   
    }) .asIterable() // returns an Iterable of BiValue elements
   
    // an elements key is the persons name, its value is the string length.filter(e -> e.getValue() >= 4)。sorted((a, b) -> a.getValue() - b.getValue()) .forEach(e -> { System.out.println(e.getKey() + + e.getValue()); }); 这样做的优点是:元素在需要的时候才进行计算如果我们取一个上千个元素的集合的前三条时,其他元素就不会被映射鼓励使用方法链我们无需才存储中间结果来构建新的集合内部迭代过程因此大多数细节。
   
    例如,我们可以通过下面代码来并行map() 操作
   
    writing myCollection.parallel()。map(e ?> e.length())。
   
    方法引用:我们可通过:: 语法来引用某个方法。方法引用被认为是跟Lambda 表达式一样的,可用于功能接口所适用的地方。
   
    我们可以引用一个静态方法:
   
    executorService.submit(MethodReference::sayHello);
   
    private static void sayHello() {System.out.println("hello");  } 或者是一个实例的方法:
   
    Arrays.asList("Alice", "Bob", "Charlie", "Dave")。forEach(System.out::println); 我们也可以创建工程方法并将构造器引用赋值给java.util.functions.Factory:
   
    Factory<Biscuit> biscuitFactory = Biscuit::new;
   
    Biscuit biscuit = biscuitFactory.make(); 最后,我们创建一个引用到随意实例的例子:
   
    interface Accessor<BEAN, PROPERTY> {
   
    PROPERTY access(BEAN bean);  }
   
    public static void main(String[] args) {
   
    Address address = new Address("29 Acacia Road", "Tunbridge Wells");
   
    Accessor<Address, String> accessor = Address::getCity;
   
    System.out.println(accessor.access(address));  }
   
    这里我们无需绑定方法引用到某个实例,我们直接将实例做为功能接口的参数进行传递。

[1] [2] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730