JAVA8 新增的功能

JAVA8 新增的功能

1.函数式接口

​ 只包含一个抽象方法的接口。可以包含多个默认方法、类方法。常用的函数式接口:Comparator Consumer :是Iterator的forEach(Consumer action) Consumer的accept(T t)方法。Predicate : Collection集合中新增的一个removeIf(Predicate filter)例:books.removeIf(ele -> ((String)ele).length<8)所有字符串长度小于8的都会被删除。

​ 例子:统计书名中出现“疯狂”的次数。

​ public static void main(String[] args) {
Collection books = new HashSet();
System.out.println(calAll(books,ele->((String)ele).contains(“疯狂”)));
}
public static int calAll(Collection books,Predicate p){
int total = 0;
for(Object obj:books){
if(p.test(obj)){
total++;
}
}
return total;
}

​ //思想非常好。直接用Lambda办不到,新增一个方法实现。

2.Stream

​ Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、 高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。 Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。

​ Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator

​ 而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。Stream 的并行操作依赖于 Java7 中引入的 Fork/Join 框架(JSR166y)来拆分任务和加速处理过程

演变过程:

1.0-1.4 中的 java.lang.Thread

  1. 5.0 中的 java.util.concurrent(juc)
  2. 6.0 中的 Phasers 等
  3. 7.0 中的 Fork/Join 框架
  4. 8.0 中的 Lambda

Stream 的另外一大特点是,数据源本身可以是无限的。

  • 当一个 Stream 是并行化的,就不需要再写多线程代码,所有对它的操作会自动并行进行的。(这里的具体应用是??)

  • 可以是无限的

    3.Comparator的默认方法 comparingInt 、Long 、Double 、reversed()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值