标签:去除 distinct stream next strong 计算 ext 数据 tin
流(Stream)
Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,流讲的是计算”!
注意:
1)Stream 不会自己存储元素
2)Stream 不会改变源对象。相反,Stream会返回一个持有结果的新Stream
3)Stream 操作是延迟执行的。这意味Stream会等到需要结果的时候才执行
一、Stream的三个操作步骤
1. 创建Stream
2. 中间操作
3. 终止操作(终端操作)
二、创建Stream
1. 通过Collection 系列集合提供的stream() 或 parallelStream()
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
2. 通过Arrays 中的静态方法stream() 获取数组流
Employee[] emps = new Employee[10];
Stream<Employee> stream = Arrays.stream(emps);
3. 通过Stream 类中的静态方法of()
Stream<String> stream = Stream.of("aa", "bb", "cc");
4. 创建无限流
1)迭代
Stream<Integer> stream = Stream.iterate(0, x -> x+2);
stream.limit(10).forEach(System.out::println);
2) 生成
Stream.generate(() -> Math.random()).limit(5).forEach(System.out.println);
二、中间操作
多个中间操作可以连接形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值”(延迟加载)。
List<Employee> employees = Arrays.asList(new Employee()...);
筛选与切片:
1. fileter —— 接受Lambda,从流中排除某些元素
内部迭代:迭代操作由Stream API完成
中间操作(不执行任何操作):
Stream<Employee> stream = employees.stream().filter(e -> e.getAge > 35);
Stream<Employee> stream = employees.stream().filter(e -> {
System.out.println("执行中间操作"); // 中间操作在没有终止操作的情况下不会执行
return e.getAge > 35;
});
终止操作(一次性执行全部内容,即“惰性求值”):
stream.forEach(System.out::println);
外部迭代:
Iterator<Employee> it = employees.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
2. limit —— 截断流,使其元素不超过给定数量
employees.stream()
.filter(e -> e.getSalary() > 5000)
.limit(2)
.forEach(System.out::println);
employees.stream()
.fileter(e -> {
System.out.println("短路"); // || 满足了就不执行
return e.getSalary() > 5000;
}).limit(2).forEach(System.out::println);
3. skip(n) —— 跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n) 互补
employees.stream().filter(e -> e.getSalary() > 5000).skip(2).forEach(System.out::println);
4. distinct —— 筛选,通过流所生成的元素的hashCode() 和equals() 去除重复元素
employees.stream().filter(e -> e.getSalary() > 5000).skip(2).distinct().forEach(System.out:println);
标签:去除 distinct stream next strong 计算 ext 数据 tin
原文地址:https://www.cnblogs.com/xzjl-23/p/14290113.html