流是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 数据源 中间操作 终端操作