1,项目组六第三周(0302-0306)总结
-- 1,1 什么是死锁?
> 1,1,1 死锁产生的条件是什么?
> 1,1,2 死锁的案例
-- 1,2 jdk1.8新特性
> 1,2,1 类型推断
* 编译器根据前面泛型具体值推断后面的泛型类型。
* 案例:
* String[] strArray = {"1","2"}
* List<String> list = new ArrayList<>();
> 1,2,2 lambda表达式
* 什么是lambda表达式?
* 运算符号:->
* lamdba表达式解决了什么问题?
* 函数式编程
* 函数式接口 == lambda表达式
* 有且只有一个抽象接口,函数接口
* 4大函数式接口
* 供给接口
* 只赋值提供对象
* 不传递变量
* T get()
* Supplier<T>
* 例:()->1
* 消费接口
* 有来无回
* 传递参数
* 无返回
* void get(T t)
* Consumer<T>
* 例:(str)->System.out.println(str)
* 断言接口
* 提供一个参数
* 返回类型 boolea
* boolean test(T t)
* Predicate<T>
* 例:(str)->str.equals("abc")
* 函数应用接口
* 有传入参数,有返回类型
* R apply(T t)
* R 返回类型
* T 传入参数
* Function<T R>
* 例:(str)->new Student(str)
> 1,2,3 方法引用
* lambda方法体中引用同级的变量
* 对象::实例方法
* System.out::println
* 类::静态方法
* Integer::compare
* 类::实例方法
* String::equals
* 方法引用要点
* 特点一:两个一致
* 参数一致
* 返回一致
* 特点二:
* 第一个参数调用方法
* 第二个参数是第一个调用方法的参数
> 1,2,4 new引用
* case1:调用无参构造
* Student::new
* 供给式接口
* case2:调用有参数构造
* Student::new
* Function<T,R>
* case3:调用多个参数构造
* 根据情况自己编写函数式接口
> 1,2,5 数组引用
* Type[]::new
* Function<T,R>
2,Stream
-- 2,1 什么Stream
> 2,0 简单理解:
>> 根据容器源数据获取新的数据过程。
>> 举例来讲:容器相当于原材料,工厂流水线相当于流操作,流水线结束后生成新的产品。
> 2,1,1概念:
>> 就是一个序列
>> 用来对容器数据进行操作
>> 容器用来存数据,Stream用来计算
> 2,2,2获取Stream方式
>> 容器直接转化
>> 数组转化
>> Stream.of
>> 无限流 Stream.iteror
> 2,2,3 Stream操作
>> 筛选
* 过滤
* limt
* distinct
>> 排序
* sort排序
> 2,2,4 终止操作
>> foreach()
3,掌握练习
-- 案例:
>> 已知条件:
* 存在以下学生:
* 张三,李四,王五,张小波,刘欢,张大飞
>> 要求1:
* 将以上学生存入容器种。
* 姓张的同学单独存在一个容器。
* 姓张的同学名字大于等于3个字存入一个容器。
>> 要求2:
* 使用原始方式进行实现一遍。
* 使用lambda方式进行实现一遍。
-- 需要完成同学:
@ALL