JDK8新特性——stream API 的使用
1.Stream关注的是对数据的运算,与CPU打交道
集合关注的是数据的存储,与内存打交道
2.Stream 自己不会存储元素
Stream不会改变源对象,相反,他们会返回一个持有结果的新Stream
Stream操作是延迟执行的,这意味着他们会等到需要结果的时候才执行
3.Stream执行流程
(1)Stream的实例化
(2)一系列的中间操作(过滤,映射,.......)
(3)终止操作
4.说明:
4.1一个中间操作链,对数据源的数据进行处理
4.2一旦终止操作,就执行中间操作链,并产生结果。之后,不会再被使用。
123456789//创建Stream方式一:通过集合
@Test
public void test1(){
List<Employee> employees= EmployeeData.getEmployeies();
//default Stream<E> 返回一个顺序流
Stream<Employee> stream=employees.stream();
//default Sream<E>parallelSreamI():返回一个并行流
Stream<Employee> parallelStream = employees.parallelStream();
}
12345678910111213//创建stream方式二:通过数组
public void test2(){
int[] array={1,2,3,4,6,7,8};
//调用Arrays类的static<T> Stream<T> stream(T[] array):返回一个流
IntStream stream = Arrays.stream(array);
Employee e1=new Employee(1001,"tom");
Employee e2=new Employee(1002,"jerry");
Employee e3=new Employee(1003,"Mack");
Employee[] employees={e1,e2,e3};
Stream<Employee> stream1 = Arrays.stream(employees);
}
12345678 //创建Stream方式四:创建无限流
@Test
public void test4(){
//遍历前10个偶数
Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println);
//输出10个随机数
Stream.generate(Math::random).limit(10).forEach(System.out::println);
}
1234567891011121314151617181920212223 @Test
public void test(){
//筛选与切片
List<Employee> employeies = EmployeeData.getEmployeies();
//filter(Predicate p)——接收lambda,从流中排除某些元素
Stream<Employee> stream = employeies.stream();
stream.filter(e->e.getSalary()>5000).forEach(System.out::println);
//截断流 输出前三
employeies.stream().limit(3).forEach(System.out::println);
//跳过前三
employeies.stream().skip(3).forEach(System.out::println);
//distinct()——筛选,去重,通过流所生成元素的hashCode()和equals()去除重复元素
employeies.add(new Employee(50,"刘强东",40,6000d));
employeies.add(new Employee(50,"刘强东",40,6000d));
employeies.add(new Employee(50,"刘强东",40,6000d));
employeies.add(new Employee(50,"刘强东",40,6000d));
employeies.stream().distinct().forEach(System.out::println);
}
12345678910111213141516 @Test
public void test3(){
ArrayList list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
ArrayList<Integer> list2=new ArrayList<>();
list2.add(4);
list2.add(5);
list2.add(6);
//list.add(list2);.
list.addAll(list2);
System.out.println(list);
}
vant van-image无法读取本地图片
JKD8的新特性——构造器引用及数组引用
评论
即可发布评论!
文章28
分类5
标签2
博客之家
一个优雅的写作平台
一个优雅的写作平台