概念
Stream是java8中处理集合的关键抽象概念,它可以指定你希望是对集合进行的操作,可进行非常复杂的查找过滤和映射数据等操作。
创建Stream
- 方式一
通过Connection系列集合提供的Stream() 或者 parallelStream()来创建
List<Employee> employees = Arrays.asList(
new Employee("张三", 32, 3333.33),
new Employee("李四", 23, 4444.33),
new Employee("李四", 18, 5555.33),
new Employee("李四", 18, 5555.33),
new Employee("李四", 18, 5555.33),
new Employee("赵六", 40, 6666.33),
new Employee("孙七", 40, 7777.33),
new Employee("王八", 66, 8888.33),
new Employee("小九", 66, 9999.33)
);
//创建Stream
Stream<Employee> stream = employees.stream();
- 方式二
通过Arrays 中的静态方法Stream() 获取数组流
String[] strs = {"wo","you","dian","fan","a"};
Stream<String> stream2 = Arrays.stream(strs);
- 方式三
通过Stream类中的静态方法 of() 得到Stream流
Stream<String> stream3 = Stream.of("wo","jue","de","ni","bu","ting","hua");
- 方式四
创建无限流(迭代)
Stream<Integer> stream4 = Stream.iterate(0, (x) -> x+2);
Stream的中间操作
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何处理!而在终止操作时一次性全部处理,称作“惰性求值”
- filter操作
接受lambda,从流中排除某些元素
//筛选出工资小于6000的员工
stream.filter((emp) -> emp.getSalary() < 6000);
- limit操作
截断流,使其元素不超过给定的数量
//不超过两个
Stream.limit(2);
- skip操作
跳过元素,返回一个可以抛掉前n个元素的流
//抛掉前三个元素
Stream.skip(3);
- distint操作
筛选,通过流所产生的元素的 hashCode() 和 equals() 去掉重复元素(筛选目标需要重写 hashCode() 和 equals() 方法)
stream.distinct();
终止操作
Stream.forEach(System.out::println);
附图: