Java8使⽤stream().filter()过滤List对象等各种操作内容简介
本⽂主要说明在Java8及以上版本中,使⽤stream().filter()来过滤⼀个List对象,查符合条件的对象集合。
list.stream().mapToDouble(User::getHeight).sum()//和
list.stream().mapToDouble(User::getHeight).max()//最⼤
list.stream().mapToDouble(User::getHeight).min()//最⼩
list.stream().mapToDouble(User::getHeight).average()//平均值
集合:
List<User> user = new User();
user .stream().collect(Collectors.summingInt(User::getAge))
参数类型:
summarizingDouble 统计数据(double)状态, 其中包括count min max sum和平均值
summarizingInt 统计数据(int)状态, 其中包括count min max sum和平均值
summarizingLong 统计数据(long)状态, 其中包括count min max sum和平均值.
summingInt 求和返回int类型
summingDouble 求和返回double类型
summingLong 求和返回long类型
counting 返回Stream的元素个数
averagingDouble 求平均值返回double类型
averagingInt 求平均值返回int类型
averagingLong 求平均值返回long类型
maxBy 在指定条件下,返回最⼤值
minBy 在指定条件下,返回最⼩值
List对象类(StudentInfo)
public class StudentInfo implements Comparable<StudentInfo> {
//名称
private String name;
//性别 true男 false⼥
private Boolean gender;
//年龄
private Integer age;
//⾝⾼
private Double height;
//出⽣⽇期
java stream
private LocalDate birthday;
public StudentInfo(String name, Boolean gender, Integer age, Double height, LocalDate birthday){
this.name = name;
this.age = age;
this.height = height;
this.birthday = birthday;
}
public String toString(){
String info = String.format("%s\t\t%s\t\t%s\t\t\t%s\t\t%s",this.String(),String(),String(),String());
return info;
}
public static void printStudents(List<StudentInfo> studentInfos){
System.out.println("[姓名]\t\t[性别]\t\t[年龄]\t\t[⾝⾼]\t\t[⽣⽇]");
System.out.println("----------------------------------------------------------");
studentInfos.forEach(s->System.out.String()));
System.out.println(" ");
}
@Override
public int compareTo(StudentInfo ob) {
return this.Age());
//return 1;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getGender() {
return gender;
}
public void setGender(Boolean gender) {
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
public LocalDate getBirthday() {
return birthday;
}
public void setBirthday(LocalDate birthday) {
this.birthday = birthday;
}
}
测试数据
/
/测试数据,请不要纠结数据的严谨性
List<StudentInfo> studentList = new ArrayList<>();
studentList.add(new StudentInfo("李⼩明",true,18,1.76,LocalDate.of(2001,3,23)));
studentList.add(new StudentInfo("张⼩丽",false,18,1.61,LocalDate.of(2001,6,3)));
studentList.add(new StudentInfo("王⼤朋",true,19,1.82,LocalDate.of(2000,3,11)));
studentList.add(new StudentInfo("陈⼩跑",false,17,1.67,LocalDate.of(2002,10,18)));
输出Students列表
//输出List
StudentInfo.printStudents(studentList);
输出结果如下图:
使⽤filter()过滤List
/
/查⾝⾼在1.8⽶及以上的男⽣
List<StudentInfo> boys = studentList.stream().filter(s-&Gender() && s.getHeight() >= 1.8).List()); //输出查结果
StudentInfo.printStudents(boys);
结果如下图:
List求和(sum)
// 年龄总和
long ageTmpSum = Sum();
// 最⼤年龄
long ageMax = Max();
// 最⼩年龄
long ageMin = Min();
// 年龄平均值
double averageAge = Average();
System.out.println(ageTmpSum);
System.out.println(ageMax);
System.out.println(ageMin);
System.out.println(averageAge);
});
}
}
1.分组
通过groupingBy分组指定字段
list.stream().upingBy(User::getSex));
2.过滤
通过filter⽅法过滤某些条件
list.stream().filter(a -> !a.getJobNumber().equals("201901")).List());
3.求和
基本类型:先mapToInt,然后调⽤sum⽅法
List.stream().mapToInt(User::getAge).sum();
⼤数类型:reduce调⽤BigDecimal::add⽅法
List.stream().map(User::getFamilyMemberQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
4.最值
最⼤值
List.stream().map(User::getEntryDate).max(Date::compareTo).get();
最⼩值
List.stream().map(User::getEntryDate).min(Date::compareTo).get();
5.排序
list.stream().sorted((o1, o2)-&Item().getValue().
Item().getValue())).
List());
sort()
单字段排序,根据id排序    list.sort(Comparatorparing(Obj::getItem));
多字段排序,根据id,年龄排序    list.sort(Comparatorparing(Obj::getItem).thenComparing(Obj::getItem));
6.去重
通过distinct⽅法
List.stream().distinct().List());
对属性
重写⽅法
7.获取list某个字段组装新list
List.stream().map(a -> a.getId()).List());

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。