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]
}




浙公网安备 33010602011771号