JDK1.8新特性关于lambda表达式和Stream

 关于1.8的新特性引入了Java.util.stream关于集合的操作跟IO没有关系

用stream的优势在与

1:他使代码能加的简洁

2:他在性能的方面,Stream API是可以在多核情况下使用的,Java Stream类库做了升级优化代码不用做任何的修改就能享受升级带来的好处.

我们可以看一下前辈总结的关于性能方面的测试:

关于Java Stream API性能方面的测试

结论

上述三个实验的结果可以总结如下:

  1. 对于简单操作,比如最简单的遍历,Stream串行API性能明显差于显示迭代,但并行的Stream API能够发挥多核特性。
  2. 对于复杂操作,Stream串行API性能可以和手动实现的效果匹敌,在并行执行时Stream API效果远超手动实现。

所以,如果出于性能考虑,1. 对于简单操作推荐使用外部迭代手动实现,2. 对于复杂操作,推荐使用Stream API, 3. 在多核情况下,推荐使用并行Stream API来发挥多核优势,4.单核情况下不建议使用并行Stream API。

如果出于代码简洁性考虑,使用Stream API能够写出更短的代码。即使是从性能方面说,尽可能的使用Stream API也另外一个优势,那就是只要Java Stream类库做了升级优化,代码不用做任何修改就能享受到升级带来的好处。

根据这些下面是我写的一些代码来检验:

 这是一些底层原理:

 代码:

package com.tedu.testliat;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;

public class lambda {
    public static void main(String[] args) {
        //方法引用lambda  1
        System.out.println("方法引用lambda:1");
        Arrays.asList("7.jpg","8.jpg").stream()
                .map(filename->"http//www.te.cn/"+filename)
                .forEach(System.out::println);
        //方法引用lambda  2 这里我们可以点进去看Stream.of的底层就是Arrays.stream
        System.out.println("方法引用lambda:2");
        Stream.of("1.jpg","2.jpg")
                .map(filename->"http//www.te.cn/"+filename)
                .forEach(System.out::println);
        //lambda表达式
        System.out.println("lambda表达式:1");
        Arrays.asList("3.jpg","4.jpg").stream()
                .map((String filename)->{return "http//www.te.cn/"+filename;})
                .forEach((String filename)->{System.out.println(filename);});
           //内部类
        System.out.println("内部类:1");
        Arrays.asList("5.jpg","6.jpg").stream()
                .map(new Function<String, String>() {
                    @Override
                    public String apply(String t) {
                        return "http//www.te.cn/"+t;
                    }
                }).forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
    }
}

运行结果: 

方法引用lambda:1
http//www.te.cn/7.jpg
http//www.te.cn/8.jpg
方法引用lambda:2
http//www.te.cn/1.jpg
http//www.te.cn/2.jpg
lambda表达式:1
http//www.te.cn/3.jpg
http//www.te.cn/4.jpg
内部类:1
http//www.te.cn/5.jpg
http//www.te.cn/6.jpg

Process finished with exit code 0

小结

一个方法接收的是一个函数式接口,使用lambda表达式,让代码简洁

java中有那些函数式接口,如function,comsumer

java.util.stream,企业中对集合进行操作用Stream.

使用stream.map()对集合数据做处理,使用collect()把处理好的数据放到一个集合中。使用foreach()遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值