Java8之list.stream的常见使用
直接看代码:
public static void main(String[] args) { List<student> list = Lists.newArrayList(); list.add(new Student("测试", "男", 18)); list.add(new Student("开发", "男", 20)); list.add(new Student("运维", "女", 19)); list.add(new Student("DBA", "女", 22)); list.add(new Student("运营", "男", 24)); list.add(new Student("产品", "女", 21)); list.add(new Student("经理", "女", 25)); list.add(new Student("产品", "女", 21)); //求性别为男的学生集合 List<student> l1 = list.stream().filter(student -> student.sex.equals("男")).collect(toList()); //map的key值true为男,false为女的集合 Map<boolean, list<student="">> map = list.stream().collect(partitioningBy(student -> student.getSex().equals("男"))); //求性别为男的学生总岁数 Integer sum = list.stream().filter(student -> student.sex.equals("男")).mapToInt(Student::getAge).sum(); //按性别进行分组统计人数 Map<string, integer=""> map = list.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.summingInt(p -> 1))); //判断是否有年龄大于25岁的学生 boolean check = list.stream().anyMatch(student -> student.getAge() > 25); //获取所有学生的姓名集合 List<string> l2 = list.stream().map(Student::getName).collect(toList()); //求所有人的平均年龄 double avg = list.stream().collect(averagingInt(Student::getAge)); //求年龄最大的学生 Student s = list.stream().reduce((student, student2) -> student.getAge() > student2.getAge() ? student:student2).get(); Student stu = list.stream().collect(maxBy(Comparator.comparing(Student::getAge))).get(); //按照年龄从小到大排序 List<student> l3 = list.stream().sorted((s1, s2) -> s1.getAge().compareTo(s2.getAge())).collect(toList()); //求年龄最小的两个学生 List<student> l4 = l3.stream().limit(2).collect(toList()); //获取所有的名字,组成一条语句 String str = list.stream().map(Student::getName).collect(Collectors.joining(",", "[", "]")); //获取年龄的最大值、最小值、平均值、求和等等 IntSummaryStatistics intSummaryStatistics = list.stream().mapToInt(Student::getAge).summaryStatistics(); System.out.println(intSummaryStatistics.getMax()); System.out.println(intSummaryStatistics.getCount()); } @Data @AllArgsConstructor static class Student{ String name; String sex; Integer age; }
后给大家说一个并行化流操作parallelStream(),跟stream()的用法一样。使用parallelStream就能立即获得一个拥有并行能力的流,利用好并行化非常重要。不过并不是所有的流计算都要使用并行化流操作,只有当计算机是多核并且集合数据量较大(超过一万)的时候使用并行化流操作可以提高效率。
影响性能的五要素:数据大小、源数据结构、值是否装箱、可用的CPU数量以及处理每个元素所花的时间。
——————————————