Java8新特性:Stream 筛选与切片
package entity;
public class Employee {
private String name;
private int age;
private double money;
getset tostring.....
}
package com;
import entity.Employee;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.*;
import java.util.stream.Stream;
public class Main {
static List employees = Arrays.asList(
new Employee("aa", 18, 99999.99),
new Employee("bb", 22, 222222.22),
new Employee("cc", 33, 23123.9),
new Employee("dd", 11, 139.99),
new Employee("ee", 23, 929.99),
new Employee("ff", 68, 1000.00)
);
public static void main(String[] args) {
Stream stream = employees.stream();
//可以看到这里面filter方法要传一个断言型接口。
Stream employeeStream = stream.filter((e) -> e.getAge() > 30);
// employeeStream.forEach((x)-> System.out.println(x));
employeeStream.forEach(System.out::println);
}
}
forEach方法里面要传一个消费型接口
filter方法要传一个断言型接口。
但是如果只有中间操作,没有后面的forEach终止操作:
public static void main(String[] args) {
Stream stream = employees.stream();
//可以看到这里面filter方法要传一个断言型接口。
Stream employeeStream = stream.filter((e) ->
{
System.out.println("这是中间操作");
return e.getAge() > 30;
}
);
// employeeStream.forEach((x)-> System.out.println(x));
// employeeStream.forEach(System.out::println);
}
可以看到,中间操作的代码没有执行。
如果再加上终止操作后:
可以看到,终止操作有了才做中间操作。
惰性求值, 或者叫做延迟加载。
===================================
可以看到,当满足了limit之后,就不在向后面继续迭代了,这可以作为一个小的优化点。