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数量以及处理每个元素所花的时间。

  • 34
    点赞
  • 195
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Java 8中引入了Stream API,它是一种高效的、函数式的数据处理方式。list.stream()是将一个List对象转换成一个Stream对象。利用Stream API,可以对List中的元素进行高效、灵活的操作,例如过滤、映射、排序、聚合等。 下面是一些常见list.stream()的使用场景: 1. 过滤元素 可以使用filter方法过滤List中的元素,例如: List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> filteredList = list.stream() .filter(i -> i % 2 == 0) .collect(Collectors.toList()); System.out.println(filteredList); // [2, 4, 6] 上述代码使用stream()方法将List转换成Stream,然后使用filter方法过滤了所有偶数,最后使用collect(Collectors.toList())方法将过滤后的结果转换成List对象。 2. 映射元素 可以使用map方法将List中的元素映射成另一个对象,例如: List<String> list = Arrays.asList("apple", "banana", "orange"); List<Integer> lengthList = list.stream() .map(String::length) .collect(Collectors.toList()); System.out.println(lengthList); // [5, 6, 6] 上述代码使用stream()方法将List转换成Stream,然后使用map方法将每个字符串映射成其长度,最后使用collect(Collectors.toList())方法将结果转换成List对象。 3. 排序元素 可以使用sorted方法对List中的元素进行排序,例如: List<Integer> list = Arrays.asList(5, 3, 1, 4, 2); List<Integer> sortedList = list.stream() .sorted() .collect(Collectors.toList()); System.out.println(sortedList); // [1, 2, 3, 4, 5] 上述代码使用stream()方法将List转换成Stream,然后使用sorted方法对元素进行排序,最后使用collect(Collectors.toList())方法将结果转换成List对象。 4. 聚合元素 可以使用reduce方法对List中的元素进行聚合,例如: List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Optional<Integer> sum = list.stream() .reduce((a, b) -> a + b); System.out.println(sum.get()); // 15 上述代码使用stream()方法将List转换成Stream,然后使用reduce方法将所有元素累加起来,最后使用get方法获取计算结果。 总之,Stream API提供了丰富的方法和操作,可以极大地简化代码,并且能够提高程序的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值