一. Lambda表达式
1.java是面向对象语言,面向对象传递参数不能是单个函数,sort需要一个比较函数,只创建一个对象,将方法包装在对象中传递,可以通过创建匿名内部类,将函数包装起来.
2.jdk8之后为了再次简化语法,推出Lambda语言,Lambda就是一个匿名函数,简化匿名内部类语法,以后可以进行匿名函数当作函数传递,java语言会自己推断,补全代码
public interface Oper {
void show();//无参无返回值抽象方法
}
public class TestOper {
public void test(Oper oper){
oper.show();//调用接口中抽象方法
}
public static void main(String[] args) {
TestOper testOper=new TestOper();
//无参无返回值lambda表达式
testOper.test(()->{
System.out.println("无参函数");
});
}
}
public interface Oper {
// void show();//无参无返回值抽象方法
int add(int a, int b);//有参有返回值抽象方法
}
public class TestOper {
public void test(Oper oper){
// oper.show();//调用接口中抽象方法
oper.add(2,3);
}
public static void main(String[] args) {
TestOper testOper=new TestOper();
/*//无参无返回值lambda表达式
testOper.test(()->{
System.out.println("无参函数");
});
*/
//有参有返回值lambda表达式
testOper.test((a,b)->{
int c=a+b;
System.out.println(c);
return c;
});
}
}
3.使用lambda表达式时只能有一个抽象方法,因为需要自动类型转换
二.Stream流
1.流:流是java8推出的新功能,与IO流完全不同的,提供了对象数据集合进行操作的各种方法,我们只需要声明做什么即可
2.java集合,数组主要存储数据,而Stream主要作用是对集合进行操作
数据集合->Stream->filter->Stream->sorted->流->to list/sum/max
(获取流) (流的中间操作) (终端操作)
对集合进行遍历的高级迭代器
import java.util.Arrays;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
Integer []a={1,2,3,5,6,6,7,9,8};//定义一个整数型数组
//获取流
Stream.of(1,2,3,5,6,6,7,9,8);
Arrays.stream(a)
//中间操作
.distinct()//去重
.filter((e)->{return e<3;})//过滤条件
.sorted((x,y)->{return x-y;})//进行排序
.skip(2)//进行分页,分配几个元素
.limit(3)//跳过两个元素
//终端操作
.forEach((e)->{
System.out.println(e);
});
}
}