java8快速对list集合的筛选计算取值总结在我们⽇常开发过程中,有很多场景需要对list集合进⾏取值筛选,以下是我对常⽤的⼀些知识点进⾏总结⾸先,创建⼀个需要⽤到的对象,例如学⽣对象,有相关字段:姓名,年龄,性别
public class Student {
private String name;
private int age;
private String sex;
public Student( String name,int age,String sex){
this.age = age;
this.name = name;
this.sex = sex;
}
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 String getSex(){
return sex;
}
public void setSex(String sex){
this.sex = sex;
}
}
其次,对这些字段属性进⾏赋值
Student s1 =new Student("⼩⾦",20,"⼥");
Student s2 =new Student("⼩宋",21,"⼥");
Student s3 =new Student("⼩张",25,"男");
Student s4 =new Student("⼩王",27,"男");
bigdecimal取值范围Student s5 =new Student("⼩王",30,"未知");
List<Student> list =new ArrayList<>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
1、遍历-foreach
使⽤stream流进⾏foreach遍历
list.stream().forEach(student->{
//处理逻辑,打印出所有学⽣的姓名
System.out.Name());
});
2、筛选list
filter函数的()⾥,应该放逻辑,判断条件,将符合条件的放到resultList中
代码如下,筛选集合中所有性别为⼥的学⽣
List<Student> resultList = list.stream().filter(student -> Objects.Sex(),"⼥")).collect(
System.out.Name());
});
运⾏结果:
3、list去重
根据性别去重
List<Student> unique = list.stream().llectingAndThen(
System.out.Name());
});
运⾏结果:
4、取出list集合对象中某⼀个属性
取出每个对象中的姓名组成⼀个新的集合
List<String> listStr = list.stream().map(Student::getName).List());
去重
List<String> listNew = listStr .stream().map(Student::getName).distinct().List());
5、list与map互转,并根据某⼀属性进⾏分组
list转map (下⽅studentMap运⾏会报错,因为作为key值,name不能重复,所以正式开发中应该使⽤唯⼀性id作为key值) Map<String, Student> studentMap = list.stream().Map(Student::getName, student -> student));
list转数组
String[] listStrs = list.stream()
.filter(e -> Objects.Sex(),"男"))
.sorted(Comparatorparing(Student::getName))
.map(Student::getName).toArray(String[]::new);
list转map并且分组
Map<String, List<Student>> listMap = list.stream().upingBy(Student::getSex));
运⾏结果:
根据对象某些属性,进⾏分组
Map<List, List> studentsMap= list.stream()
.upingBy(f -> Arrays.Age),f.getSex())));
map转list
List<Student> collect = studentMap.values().stream().List());
6、过滤属性为空的字段
Student s6 =new Student("",30,"男");
list.add(s6);
List<String> stringList = list.stream().map(s -> s.getName()).filter(s ->!s.isEmpty()).List());
7、根据某⼀属性进⾏计算
根据年龄求最⼤值、最⼩值、平均值、总和、个数
IntSummaryStatistics resultNum = list.stream().mapToInt((item)-&Age()).summaryStatistics();
System.out.println("max:"+Max());
System.out.println("min:"+Min());
System.out.println("sum:"+Sum());
System.out.println("average:"+Average());
System.out.println("count:"+Count());
运⾏结果:
注意:
1、求和有三种类型,mapToInt,mapToLong,mapToDouble
2、如果是Bigdecimal数值类型,则计算⽅法如下,(新建对象)
Frult frult1 =new Frult("西⽠",new BigDecimal(1));
Frult frult2 =new Frult("梨⼦",new BigDecimal(2));
List<Frult> frultList =new ArrayList<>();
frultList.add(frult1);
frultList.add(frult2);
BigDecimal totalPrice = frultList.stream().map(Frult::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
//或者⽤mapToInt()进⾏强转(int->Bigdecimal)
结语:本⼈⽬前⽤到这么多,希望各位有更好的或者其它的⽤法给予建议与评论,有错误也希望能得到指正!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论