stream是java8的新特性,它可以代替for循环,可以加快代码运行速度,使用stream可以写出高效率、干净、简洁的代码。
下边直接讲stream的使用方法,前提是你已经获取到了list的数据(本篇可博客的list是students)。如果您是刚用,没有数据,也可参考该博客最下边的数据准备。
在一个班级,每个人都有自己的分数,怎样在java中使用代码对所有人的分数进行求和。
使用mapToInt/mapToLong/mapToDouble方法进行求和
如果是整型就使用mapToInt,
如果是长整型就使用mapToLong,
如果是浮点型就使用mapToDouble
System.out.println("求和:");
int sumStudentScoreInt = students.stream().mapToInt(student::getScore).sum(); //(1)
//int sumStudentScoreInt = students.stream().mapToInt(student->student.getScore()).sum();//(2)
System.out.println("Int分数和:"+sumStudentScoreInt);
//(1)和(2)只是写法不一样,“student::getScore”和“student->student.getScore()”是等价的,效果是一样的
double sumStudentScoreDouble = students.stream().mapToDouble(student::getScore).sum();
//double sumStudentScoreDouble = students.stream().mapToDouble(student->student.getScore()).sum();
System.out.println("Double分数和:"+sumStudentScoreDouble);
long sumStudentScoreLong = students.stream().mapToLong(student::getScore).sum();
//long sumStudentScoreLong = students.stream().mapToLong(student->student.getScore()).sum();
System.out.println("Long分数和:"+sumStudentScoreLong);
在一个班级,每个人都有自己的分数,怎样在java中使用代码筛选出某个分数段的所有人。
使用filter方法进行过滤
System.out.println("过滤:");
List collectStudentFilter = students.stream().filter(student -> student.getScore() > 90).collect(Collectors.toList());
collectStudentFilter.stream().forEach(System.out::println);
在一个班级,每个人都有自己的分数,怎样在java中使用代码根据分数的高低进行排序。
使用sorted方法进行排序
升序——默认就是升序
降序——添加reversed()即是降序
//升序
System.out.println("升序:");
List collectStudentSorted = students.stream().sorted(Comparator.comparing(student::getScore)).collect(Collectors.toList());
collectStudentSorted.stream().forEach(System.out::println);
//降序
System.out.println("降序:");
List collectStudentSortedDesc = students.stream().sorted(Comparator.comparing(student::getScore).reversed()).collect(Collectors.toList());
collectStudentSortedDesc.stream().forEach(System.out::println);
在一个班级,每个人都有自己的分数,怎样在java中使用代码获取这个班每个人的人名。
使用map获取某个参数
System.out.println("获取人名:");
List collectStudents = students.stream().map(student -> student.getName()).collect(Collectors.toList());
collectStudents.stream().forEach(System.out::println);
1、有一个实体类(student)
package main.java;
public class student {
private String name;
private Integer score;
private String dept;
public student(String name, Integer score, String dept) {
this.name = name;
this.score = score;
this.dept = dept;
}
public String getName() {
return name;
}
public Integer getScore() {
return score;
}
public String getDept() {
return dept;
}
public void setName(String name) {
this.name = name;
}
public void setScore(Integer score) {
this.score = score;
}
public void setDept(String dept) {
this.dept = dept;
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", score=" + score +
", dept='" + dept + '\'' +
'}';
}
}
2、实例化几个对象
student studentTYW = new student("佟毓婉",88,"学生");
student studentZTC = new student("周霆琛",96,"老师");
student studentDYT = new student("杜允唐",87,"学生");
3、将这些数据放到list里
List students = Arrays.asList(studentTYW, studentZTC, studentDYT);
这样有了数据,可以对这些数据进行操作了。