- 认识函数式接口
@FunctionalInterface
public interface Lamdbatest {
Integer getdouble(Integer s);
}
- Lamdba表达式
lamdba可以实现函数式接口创建出一个对象,
lamdba允许把一个函数作为一个方法的参数,或是将一个方法赋值给一个属性
-实现类实现接口
public class impllamdba implements Lamdbatest {
@Override
public Integer getdouble(Integer s) {
return s+=s;
}
}
-- 测试和lamdba表达式的区别
//创建出函数式接口的是实现类对象
Lamdbatest impllamdba = new impllamdba();
//通过对象使用::符号来调用,返回property对象通过apply方法来实现
Property<Integer, Integer> getdouble1 = impllamdba::getdouble;
System.out.println(getdouble1.apply(2));
//调用实现类来调用方法
System.out.println("这是函数式接口实现类使用"+impllamdba.getdouble(5));
//通过lamdba表达式来是实现接口
Integer getdouble = ((Lamdbatest) (s) -> s += s).getdouble(2);
System.out.println("这个是lamdba表达式使用实现"+getdouble);
通过上述可以看出lamdba表达式可以实现函数式接口不用在自定义实现类了,可以自定义实现,
如果有实现类可以创建对象使用::来调用方法
- stream流的使用
- 什么是stream?
一般是对集合进行使用,可以把集合中的元素看做是一种流,在流的过程中可以通过stream api来对元素进行操作
数组和集合都可以创建成流,流的操作分为两种;
1 中间操作 每次操作返回一个新的流,
2 终端操作 操作一次就无法再次操作了 - stream的特点
1 不会存储数据
2 不会改变数据源
3 有延迟性只有调用终端操作时中间操作才会执行 - 创建流
Collection.stream()方法来创建顺序流
Collection.parallelStream() 创建并行流
Arrays.stream(new array[]) 数组变成流
- stream中的静态方法
1 of()
2 iterate()
3 generate()
都可以返回成流
- stream和parallelStream的区分
1 stream是顺序流,由主线程处理
2 parallelStream是并行流,多线程运行处理 - Optional是对象容器
- 示例
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Tom", 8900,4,<