关于1.8的新特性引入了Java.util.stream关于集合的操作跟IO没有关系
用stream的优势在与
1:他使代码能加的简洁
2:他在性能的方面,Stream API是可以在多核情况下使用的,Java Stream类库做了升级优化代码不用做任何的修改就能享受升级带来的好处.
我们可以看一下前辈总结的关于性能方面的测试:
结论
上述三个实验的结果可以总结如下:
- 对于简单操作,比如最简单的遍历,Stream串行API性能明显差于显示迭代,但并行的Stream API能够发挥多核特性。
- 对于复杂操作,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()遍历