编程没有银弹 探讨Java8新增特性优缺点
副标题[/!--empirenews.page--]
【 评论】Java 8或许是 迄今为止最令人期待的Java版本,最初定于今年的9月份发布,但由于一系列的安全漏洞问题,目前已推迟到明年的3月份。
Java 8试图“创新”,根据 微软对这个词的定义,就是把其他框架或语言里成熟的特性“偷”进来。在新版本发布之前,Java社区就已经开始讨论Lambda项目、Streams、函数式接口等其他好东西。下面就让我们一起来看下这些伟大的功能,看看它们各自的优缺点,好让你更好地应用在项目中。 Streams 集合(Collections)的改进也是Java 8的一大亮点,而让集合越来越好的核心组件则是“Stream”。它与java.io包里的InputStream和OutputStream是完全不同的概念,它是一个全新的概念,大家不要混淆。 此外,Stream的出现也并不是要取代ArrayLists或其他集合,它提供了一种操作大数据接口,让数据操作更容易和更快。Stream是 一次性使用对象,一旦被遍历,就无法再次遍历。在遍历时,它具有过滤、映射以及减少遍历数等功能。每个Stream都有两种模式:顺序执行和并行执行,其 能够利用多核处理器的优势,并可以使用 fork/join并行方式来拆分任务和加速处理过程。 顺序流: List people = list.getStream.collect(Collectors.toList()); 并行流: List people = list.getStream.parallel().collect(Collectors.toList()); 顾名思义,当使用顺序方式去遍历时,每个item读完后再读下一个item。而使用并行去遍历时,数组会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。 并行流实例: List originalList = someData; split1 = originalList(0, mid); split2 = originalList(mid,end); new Runnable(split1.process()); new Runnable(split2.process()); List revisedList = split1 + split2; 由于一个Stream只能被遍历一次,通常会返回另外一个Stream,可以使用终端方法(terminal method)来获取有用的结果,终端方法可以是sum()、collect()或toArray()等。在Stream被终止之前,操作的结果不会被实现。 Double result = list.getStream().mapToDouble(f -> f.getAmount()).sum(); List people = list.getStream().filter(f -> f.getAge() > 21).collect(Collectors.toList()); 该功能最大的好处是允许使用多核处理器来处理集合,这样处理速度会更加快速。而最主要的问题则是可读性。随着流链的加长,很有可能影响可读性。其它问题则来源于内置的新东西来支持这个新路径,这些是功能接口和Lambda。 (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |