流是啥
流是JavaAPI的新成员,它允许你以声明性方式处理数据集合。
例如:实现返回热量低的菜肴的名称
jdk7
List<Dish> lowCaloricDishes = new ArrayList<>();
for(Dish d : menu){
if(d.getCalories()<400){
lowCaloricDishes.add(d) //累加器筛选出元素
}
}
Collections.sort(lowCaloricDishes,new Comparator<Dishes>(){
public int compare(Dish d1,Dish d2){
return Integer.compare(d1.getCalories,d2.getCalories); //匿名内部类进行排序
}
})
List<String> lowCaloricDishesName = new ArrayList<>();
for(Dish d:lowCaloricDishes){
lowCaloricDishesName.add(d.getName()); //讲菜名放到集合中
}
jdk8
List<String> lowCaloricDishesName =
menu.stream()
.filter(d->d.getCalories()<400) //筛选出热量小于
.sorted(comparing(Dish::getCalories)) //排序
.map(Dish::getName) //取出菜名
.collect(toList()); //保存到list中
总结一下,Stream 让你的代码
声明性——更简洁,更易读
可复合——更灵活
可并行——性能更好
流与集合
集合讲的是数据 流讲的是计算
只能遍历一次 和迭代器类似,只能遍历一次。遍历完之后,我们就说这个流已经被消费掉了。
使用内部迭代
流的操作
简单叙述一下,后面会详细讲解,还是以上面的选出低热量的菜肴为例
menu -> filter -> map ->limit ->list
数据源 中间操作 终端操作