Lambda表达式&stream流

一、Lambda表达式

1.Lambda表达式出现的背景;

我们想要把某些功能传递给某个方法,总要去写匿名类,就还是复杂了,因为其核心部分只是里面的函数表达式,于是Java 8 增加了一个语言级的新特性,名为 Lambda 表达式。

2.Lambda 表达式简介:

Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段

可以传递的代码(将代码段像数据一样传递)。使用它可以写出更简洁, 更灵

活的代码。

Lambda 表达式的本质只是一个"语法糖",你可以使用更少的代码来实现同样的功能。

*这里解释下语法糖:

也叫糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但更方便程序员的使用。这种语法能够增强程序的可读性,从而减少程序代码出错的机会。

3.Lambda 表达式的结构:

1.可以显式声明参数的类型,也可以由编译器自动从上下文推断参数的类型

例如 (int a,int b)与 (a,b)相同。

·参数用小括号括起来,用逗号分隔。例如 (a, b) 或 (int a, int b) 或 (String

a, int b, float c)

·空括号用于表示一组空的参数。例如 () -> 42。

·当有且仅有一个参数时,如果不显式指明类型,则不必使用小括号。

例如 a -> return a*a。

·Lambda 表达式的正文可以包含零条,一条或多条语句。

·如果 Lambda 表达式的正文只有一条语句,则大括号可不用写,且表达式

返回值类型要与匿名函数的返回类型相同

· 如果 Lambda 表达式的正文有一条以上的语句必须包含在大括号(代码块)

中,且表达式的返回值类型要与匿名函数的返回类型相同。

4.什么是功能接口(Functional interface)

1.Lambda 表达式只支持函数式接口 也就是只有一个抽象方法的接口.也就是功能接口,也称为单抽

象方法接口。

2.注解标签:@FunctionalInterface 违反时有提示

实例:

Lambda表达式&stream流_第1张图片

 

注:只能用一个抽象方法

案例:

Lambda表达式&stream流_第2张图片

 

//Shape d这里 就是 直接调实现Shape接口的area()方法 传参进去

stream---流

1.什么是流?

1.流(Stream)

可以提供了许多对集合,数组进行遍历操作的方法(java提供的高级迭代器)

stream 与 lambada 表达示结合后编码效率与大大提高,并且可读性更强。

2.操作:

获取流

流操作

简单来说,我们通过一个集合的 stream 方法获取一个流,然后对流进行一 系列流操作,最后再构建成我们需要的数据集合。

简单说就是widgets集合 .stream()作用就是把集合放到stream流中产生一个stream对象 在对象上.调用sorted()方法 把最后的数据又放到集合widgets中

虽然说高级迭代器,但不需要说明实现for循环,只需要说明想要完成什么Lambda表达式&stream流_第3张图片(筛选 排序 取值 )一条龙服务

 

所以说Stream允许你以声明的方式处理数据集合 可以把他看作是遍历数据集的高级迭代器。与IO流是完全不同概念。

到底什么是流:从支持数据处理操作的源,生成的元素序列

即 java中提供stream接口,他可以对集合 数组进行各种操作

Lambda表达式&stream流_第4张图片

 

3.获取流:

Lambda表达式&stream流_第5张图片

 

4.操作流:

流操作可以分为两类:中间操作终端操作

中间操作:

filter:过滤流中的某些元素,

sorted(): 自然排序,流中元素需实现 Comparable 接口

distinct: 去除重复元素

limit(n): 获取 n 个元素

skip(n): 跳过 n 元素,配合 limit(n)可实现分页

map(): 将其映射成一个新的元素

Lambda表达式&stream流_第6张图片

 

终端操作 :最终将流转变为想要的结果

forEach: 遍历流中的元素

toArray:将流中的元素倒入一个数组

Min:返回流中元素最小值

Max:返回流中元素最大值

count:返回流中元素的总个数

Reduce:所有元素求和

anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返

回 true,否则返回 false

allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返

回 true,否则返回 false

findFirst:返回流中第一个元素

collect:将流中的元素倒入一个集合,Collection 或 Map

中间操作后得到的还是一个流

 

//数组获取流
        Integer [] a = new Integer[10];
        Stream stream1 = Arrays.stream(a);
​
        Stream stream2 =  Stream.of(1,2,3,4,5,6,7);//stream1 stream2都是这样操作的 数组  两种方式而已  下面stream2为例
​
                 stream2
                         .filter( (e)->{ return e>3; } )
                         .forEach( (e1->{
                             System.out.println(e1);
                         }));
​
​
​
        List alist =  stream2   //意思是终端操作后转成集合的List类型
                .filter( (e)->{ return e>3; } )  //中间 操作  条件过滤
                .collect(Collectors.toList());   //终端操作  最终将流转为我们想要的结果
        System.out.println(alist);
 ArrayList list = new ArrayList<>();
                            list.add(3);
                            list.add(2);
                            list.add(1);
                            list.add(1);
                            list.add(5);
                            list.add(4);
                            list.add(4);
                            list.add(6);
                            list.add(7);
​
             
                 list.stream()
                      .sorted( (o1,o2)->{  return o1-o2;} )
                      .forEach((e)->{
                          System.out.println(e);
                      });
​

你可能感兴趣的:(JavaSE,后端,java,开发语言)