java8 stream理解与应用(1)
来源:互联网 发布:淘宝静物摄影布光技巧 编辑:程序博客网 时间:2024/06/07 04:03
stream 流,什么是流,流是从支持数据处理操作的源生成的元素序列,我们拆开这句
元素序列:就像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序
值,流讲的是计算
源:流会使用一个提供数据的源,如集合、数组或输入/输出资源
数据处理操作:流的数据处理功能支持类似于数据库的操作,以及函数式编程语言中
的常用操作,如 filter 、 map 、 reduce 、 find 、 match 、 sort 等。流操作可以顺序执
行,也可并行执行
合起来简单的理解就是,能像编写SQL语言抽象一样编写stream,但不同的是他们侧重计算逻辑,其特点是内部匿名迭代和对源进行SQL式的查询流水操作
现在我们实例分析下
import static java.util.Comparator.comparing;import static java.util.stream.Collectors.toList;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class StreamBasic { public static void main(String[]args){ // Java 7 getLowCaloricDishesNamesInJava7(Dish.menu).forEach(System.out::println); System.out.println("---"); // Java 8 getLowCaloricDishesNamesInJava8(Dish.menu).forEach(System.out::println); } public static List<String> getLowCaloricDishesNamesInJava7(List<Dish> dishes){ List<Dish> lowCaloricDishes = new ArrayList<>(); for(Dish d: dishes){ if(d.getCalories() < 400){ lowCaloricDishes.add(d); } } List<String> lowCaloricDishesName = new ArrayList<>(); Collections.sort(lowCaloricDishes, new Comparator<Dish>() { public int compare(Dish d1, Dish d2){ return Integer.compare(d1.getCalories(), d2.getCalories()); } }); for(Dish d: lowCaloricDishes){ lowCaloricDishesName.add(d.getName()); } return lowCaloricDishesName; } public static List<String> getLowCaloricDishesNamesInJava8(List<Dish> dishes){ return dishes.stream() //将list转为流 .filter(d -> d.getCalories() < 400) //对list操作 过滤少于400的菜单 .sorted(comparing(Dish::getCalories)) //对list操作 数值比较并排序 .map(Dish::getName) //对list操作并调用菜单名称并转换k,v的map结构 .collect(toList()); //将map转换为list }}
import java.util.*;public class Dish { private final String name; private final boolean vegetarian; private final int calories; private final Type type; public Dish(String name, boolean vegetarian, int calories, Type type) { this.name = name; this.vegetarian = vegetarian; this.calories = calories; this.type = type; } public String getName() { return name; } public boolean isVegetarian() { return vegetarian; } public int getCalories() { return calories; } public Type getType() { return type; } public enum Type { MEAT, FISH, OTHER } @Override public String toString() { return name; } public static final List<Dish> menu = Arrays.asList( new Dish("pork", false, 800, Dish.Type.MEAT), new Dish("beef", false, 700, Dish.Type.MEAT), new Dish("chicken", false, 400, Dish.Type.MEAT), new Dish("french fries", true, 530, Dish.Type.OTHER), new Dish("rice", true, 350, Dish.Type.OTHER), new Dish("season fruit", true, 120, Dish.Type.OTHER), new Dish("pizza", true, 550, Dish.Type.OTHER), new Dish("prawns", false, 400, Dish.Type.FISH), new Dish("salmon", false, 450, Dish.Type.FISH));}
阅读全文
0 0
- java8 stream理解与应用(1)
- java8 stream理解(1)
- java8 stream理解(2)
- Java8之Stream(1)
- java8 Lambda 与 Stream
- java8 Stream API各种流操作应用(2)
- Java8新特性Stream API与Lambda表达式详解(1)
- java8新特性 (λ、stream 与 默认接口方法)
- java8新特性 (λ、stream 与 默认接口方法)
- Java8之Stream(2)
- Java8之Stream(3)
- Java8---Stream的介绍和相关概念(1)
- Java8---Stream的介绍和相关概念(1)
- Java8 Stream
- java8 stream
- Java8 Stream
- Java8 Stream
- Java8:Stream
- 为什么要用工厂方法模式
- 言论丨李开复:中国在AI领域的优势与机会,现阶段AI领域的挑战
- 求助大神,这个代码该怎么写
- Python得到当前时间
- Effective Java -- 重写equals方法的通用约定(一)
- java8 stream理解与应用(1)
- 蜥蜴和地下室 51Nod
- CMD_ren结合excel批量重命名
- 第十三周项目1
- 没有标题
- 《JAVA编程技巧1001条》第336条:数学函数 COS.
- ARP协议与ARP攻击入门
- 苹果Iphone/Ipad--L2TP虚拟教程
- nuts软件