Stream API使用
创建的方式
①通过集合
②通过数组
③通过Stream的of()
Stream 自己不会存储元素
Stream 不会改变源对象,会返回一个持有结果的新Stream
Stream 操作时延迟执行的,等到需要结果的时候才执行
一个中间操作链,对数据源的数据进行处理,一旦执行终止操作,就执行中间操作链,并产生结果。之后不会再被使用。
public class Student { private int id; private String name; private int age; public Student() { } public Student(String name) { this.name = name; } public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static List<Student> getStuList(){ List<Student> list = new ArrayList<>(); list.add(new Student(1001,"aa",10)); list.add(new Student(1002,"bb",20)); list.add(new Student(1003,"cc",30)); list.add(new Student(1004,"dd",40)); list.add(new Student(1005,"ee",50)); return list; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
@Test public void test(){ List<Student> stuList = Student.getStuList(); Stream<Student> stream = stuList.stream(); stream.filter(stu -> stu.getAge()>20).forEach(System.out::println); //返回年龄>20的Student对象集合 List<Student> list = stuList.stream().filter(stu -> stu.getAge() > 20).collect(Collectors.toList()); System.out.println(list); //返回name集合 List<String> nameList = stuList.stream().map(stu -> stu.getName()).collect(Collectors.toList()); System.out.println(nameList);//[aa, bb, cc, dd, ee] }
@Test public void test2(){ List<String> list = Arrays.asList("dd","bb","aa","cc","ee"); List<String> list2 = list.stream().sorted().collect(Collectors.toList()); System.out.println(list2);//[aa, bb, cc, dd, ee] List<String> list3 = list.stream().sorted(new Comparator<String>() { @Override public int compare(String o1, String o2) { return -o1.compareTo(o2); } }).collect(Collectors.toList()); System.out.println(list3);//[ee, dd, cc, bb, aa] List<String> list4 = list.stream().sorted((a,b) -> a.compareTo(b)).collect(Collectors.toList()); System.out.println(list4);//[aa, bb, cc, dd, ee] List<String> list5 = list.stream().sorted(String::compareTo).collect(Collectors.toList()); System.out.println(list5);//[aa, bb, cc, dd, ee] Student stu1 = new Student(1,"aa",10); Student stu2 = new Student(4,"bb",20); Student stu3 = new Student(2,"cc",30); Student stu4 = new Student(3,"dd",40); Student stu5 = new Student(5,"ee",50); List<Student> stuList = new ArrayList<>(); stuList.add(stu1); stuList.add(stu2); stuList.add(stu3); stuList.add(stu4); stuList.add(stu5); List<Student> stuList2 = stuList.stream().sorted((s1, s2) -> Integer.compare(s1.getId(), s2.getId())).collect(Collectors.toList()); System.out.println(stuList2);//[Student{id=1, name='aa', age=10}, Student{id=2, name='cc', age=30}, Student{id=3, name='dd', age=40}, Student{id=4, name='bb', age=20}, Student{id=5, name='ee', age=50}] }
@Test public void test3(){ List<Student> stuList = Student.getStuList(); Optional<Integer> sum = stuList.stream().map(stu -> stu.getAge()).reduce((t1, t2) -> t1 + t2); System.out.println(sum);//Optional[150] 所有员工age之和 Optional<Integer> sum2 = stuList.stream().map(stu -> stu.getAge()).reduce(Integer::sum); System.out.println(sum2);//Optional[150] }