详解java8中的Stream数据流

 更新时间:2017年10月16日 08:44:13   作者:贝克田庄  
Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。接下来通过本文给大家分享java8中的Stream数据流知识,感兴趣的朋友一起看看吧

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到我们的编码中。

筛选重复的元素

Stream 接口支持 distinct 的方法, 它会返回一个元素(根据流所生成元素的 hashCode和equals方法实现)的流。

例如,以下代码会筛选出列表中所有的偶数,并确保没有 重复。

List<Dish> dishes = Dish.menu.stream()
.filter(Dish::isVegetarian)
.collect(Collectors.toList());

跳过指定数量的元素

Stream 支持 skip(n) 方法,返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一 个空流。limit(n) 和 skip(n) 是互补的

List<Dish> dishSkip = Dish.menu.stream().filter(d -> d.getCalories() > 300).skip(2) //去掉符合要求的集合中的前2个元素后返回
.collect(Collectors.toList());
dishSkip.forEach(System.out::println);

map 操作

Stream 支持 map 方法,它会接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映 射成一个新的元素

List<String> list = st.skip(0).limit(2).map(s->s.toUpperCase()).collect(Collectors.toList());

元素求和

List<Integer> numbers = Arrays.asList(3,4,5,1,2);
int sum1 = numbers.stream().reduce(0,(a, b) -> a + b);
System.out.println(sum1);
int sum2 = numbers.stream().reduce(0,Integer::sum);
System.out.println(sum2);

最大值

int max = numbers.stream().reduce(0,Integer::max);
System.out.println(max);

最小值

//reduce不接受初始值,返回一个Optional对象(考虑流中没有任何元素的情况)
Optional<Integer> min = numbers.stream().reduce(Integer::min);
min.ifPresent(System.out::println);

总结

以上所述是小编给大家介绍的java8中的Stream数据流,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java实现模拟机器人对话的示例代码

    Java实现模拟机器人对话的示例代码

    本文主要介绍了Java实现模拟机器人对话的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • java实现捕鱼达人游戏

    java实现捕鱼达人游戏

    这篇文章主要介绍了java实现捕鱼达人游戏,大部分功能都已实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 基于JDK8总结java中的interrupt

    基于JDK8总结java中的interrupt

    本文是基于JDK8总结java中的interrupt知识,需要的朋友可以参考下
    2017-12-12
  • Java实现冒泡排序示例介绍

    Java实现冒泡排序示例介绍

    冒泡排序是一种简单的排序算法,通过不断比较相邻两个元素的大小,将较大的元素向后移动,最终将最大的元素放到了数组的末尾。Java中的实现方式是通过嵌套两层循环,外层循环控制比较的次数,内层循环控制每次比较时相邻元素的比较和交换
    2023-04-04
  • Spring中@Scheduled注解的参数详解

    Spring中@Scheduled注解的参数详解

    这篇文章主要介绍了Spring中@Scheduled注解的参数详解,@Scheduled注解的使用这里不详细说明,@Scheduled注解有几个参数需要说明一下,直接对8个参数进行讲解,需要的朋友可以参考下
    2023-11-11
  • Springboot+ElementUi实现评论、回复、点赞功能

    Springboot+ElementUi实现评论、回复、点赞功能

    这篇文章主要介绍了通过Springboot ElementUi实现评论、回复、点赞功能。如果是自己评论的还可以删除,删除的规则是如果该评论下还有回复,也一并删除。需要的可以参考一下
    2022-01-01
  • java获取网络图片上传到OSS的方法

    java获取网络图片上传到OSS的方法

    这篇文章主要为大家详细介绍了java获取网络图片上传到OSS,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Java jar打包成exe应用程序的详细步骤

    Java jar打包成exe应用程序的详细步骤

    本文主要介绍了Java jar打包成exe应用程序的详细步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 深入解析Java的Servlet过滤器的原理及其应用

    深入解析Java的Servlet过滤器的原理及其应用

    这篇文章主要介绍了深入解析Java的Servlet过滤器的原理及应用,Java编写的Servlet通常是一个与网页一起作用于浏览器客户端的程序,需要的朋友可以参考下
    2016-01-01
  • SpringBoot2基于重复创建bean的问题及解决

    SpringBoot2基于重复创建bean的问题及解决

    这篇文章主要介绍了SpringBoot2基于重复创建bean的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论