java8新特性之Stream流操作

Stream流操作是java8的最重要的新特性之一,功能强大,非常常用。可以说每个java coder必须掌握,这次把理论放在最后面,因为你可能不需要知道的多么详细,只是需要看看某个功能,可能听名字就大概知道它是做什么的。

举个简单例子,现在给了你同学信息和成绩,你需要统计班级平均分

// 以前可能的做法
public static avgScore(List<Student> stus){
   
    int sum=0;
    for (Student student : stus) {
   
        int core = student.core;
        sum += core;
    }
    return  ((double)sum / stus.size());
}
// 有了Stream后,
public static Double avgScore(List<Student> stus){
   
        OptionalDouble average = stus.stream().mapToDouble(stu -> stu.core).average();
        return average.getAsDouble();
    }

流的一些操作:

filter

filter过滤操作,只返回满足条件的数据

filter返回的流中只包含满足断言(predicate)的数据

//输出学生数组中,成绩大于80的学生
public static void  sFilter(List<Student> stus){
   
        stus.stream()
                .filter(student -> student.getCore()>80)
                .forEach(System.out::println);
    }

distinct

distinct输出的流中彼此不同的元素,通过Object.equals(Object)来检查是否包含相同的元素。

//从数组中找出不同的对象
public static void  sDistinct(List<Student> stus){
   
        stus.stream()
                .distinct()
                .forEach(System.out::println);
    }

map、peek与forEach对比

map可以对流中每一个的元素执行操作返回一种元素(可以相同),可以用来做元素转换

peek通常用于debug,会通过Consumer对流操作,但操作结果不返回Stream中。

forEachmappeek类似,但由于不会返回元素,forEach的返回值是void,可以看做是流的终点操作

//map,从Student数组中获取由name组成的数组
public static void  sMap(List<Student> stus){
   
        List<String> collect = stus.stream()
                .map(student -> student.getName())
                .collect(Collectors.toList());
        stus.forEach(System.out::println);
        collect.forEach(System.out::println);
    }
//forEach,将Student数组中的成绩属性全部加1
public static void  sForEach(List<Student
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值