1.函数式编程思想
a>概念
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
2.lambda表达式(前提是参数接口,且接口中只有一个抽象方法)
* 前提是参数接口,且接口中只有一个抽象方法
用lambda表示时 接口中的方法就会省略不写
a>概念
jdk1.8推出的,对某些匿名内部类写法进行简化,
他是函数编程思想的一个重要体现,不在关注是什么对象,更关注对数据进行什么操作。
b>语法格式
(参数列表)->{代码}
3.Stream流
java8的Stream使用的是函数编程模式,
可以用来对集合或数组进行链状流式操作。
可以更方便的对集合和数组操作。
4.中间操作
filter distinct() map sorted limit skip flatmap
map 只能将一个对象转换为另一个对象
flatmap 可以将一个对象转换为多个对象作为流中的元素
list.stream()
.distinct() //去重复
.sorted() // //排序 实体类必须实现 compared接口,在重写方法中设置排序规则
.sorted((item1,item2)->item1.getAge-item2.getAge) //同上
.limit(5) //设置流的个数超出部分抛弃
.skip(2) //跳过前2条数据
.flatmap(item->item.getBooks.stream()) //getBook是个集合 实际就是返回stream() 类型
.filter(item->item>10 && item<20) //过滤获取item大于10的数据 &&支持多条件过滤
.map(item->item.getName) //转换类型,返回的类型与item.getName类型一致
(且数据流中只有这一列的值)
.sorted()
.foreach(item->System.out.println(item)) ;
5.终结操作
foreach //遍历对元素进行操作
count //返回long型 即流中数据的个数
collect //把当前流转换为集合(list set map)
max/min //返回最大值或最小值 只能是int类型 返回 Optional<Integer>
anyMatch //是否有任意匹配的元素 返回boolean
allMatch //是否全部符合条件 返回boolean
noneMatch //是否都不符合条件 返回boolean
findAny //获取流中任意一个元素 返回 Optional<Bean>
findfirst //获取流中的第一个元素 返回 Optional<Bean>
reduce //归并 对流中的元素按照给定的计算方式得到结果
list.stream()
.foreach(item->System.out.println(item)) ;
.count();
.map(item->item.getAge)