Java中的流式编程问题

 更新时间:2023年12月14日 08:49:13   作者:不喜欢吃猫的鱼  
这篇文章主要介绍了Java中的流式编程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

注意:这个特效是在Java8之后才引进的  就是说 jdk8之前是没有的

一. 基本概念

1.1 为什么加入 集合的流式操作     

JDK8 的Stream 是一个受到 函数式编程 和 多核时代影响而产生的东西。很多时候我们需要到底层返回数据,上层再对数据进行遍历,进行一些数据统计,但是之前的Java API 中很少有这种方法,这就需要我们自己来 Iterator 来遍历,如果JDK 能够为我们提供一些这种方法,并且能够为我们优化就好了。

所以JDK8加入 了 java.util.stream包,实现了集合的流式操作,流式操作包括集合的过滤,排序,映射等功能。根据流的操作性,又可以分为 串行流 和 并行流。

根据操作返回的结果不同,流式操作又分为中间操作和最终操作。大大方便了我们对于集合的操作。

  • 最终操作:返回一特定类型的结果。
  • 中间操作:返回流本身。

1.2 什么是流

Stream 不是 集合元素,也不是数据结构,它相当于一个 高级版本的 Iterator,不可以重复遍历里面的数据,像水一样,流过了就一去不复返。

它和普通的 Iterator 不同的是,它可以并行遍历,普通的 Iterator 只能是串行,在一个线程中执行。  

二. 串行流和并行流

串行流操作在一个线程中依次完成。

并行流在多个线程中完成,主要利用了 JDK7 的 Fork/Join 框架来拆分任务和加速处理。

相比串行流,并行流可以很大程度提高程序的效率。  

三. 中间操作和最终操作

中间操作:

  • filter(): 对元素进行过滤
  • sorted():对元素排序
  • map():元素映射
  • distinct():去除重复的元素

最终操作:

  • forEach():遍历每个元素。
  • reduce():把Stream 元素组合起来。例如,字符串拼接,数值的 sum,min,max ,average 都是特殊的 reduce。
  • collect():返回一个新的集合。
  • min():找到最小值。
  • max():找到最大值。

废话不多说 直接上代码:

public static void main(String[] args) {
   List<String> list = new ArrayList();
   list.add("a");
   list.add("b");
   list.add("c");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("e");
   list.add("f");
   list.add("aa");
   list.add("faaa");
   System.out.println("----对集合数据的过滤,根据给到的条件筛选过滤----");
   list.stream().filter(param -> !param.contains("a")).forEach(System.out::println);

   System.out.println("----对集合数据进行排序,默认的是升序排列----");
   list.stream().sorted().forEach(System.out::println);


   System.out.println("----自定义排序方式----");//注:这里是通过 Stream<T> sorted(Comparator<? super T> comparator); 这个方法
   list.stream().sorted((p1,p2) -> p1.hashCode() <p2.hashCode() ? 1 : -1).forEach(System.out::println);


   System.out.println("----对于集合的每个元素可以按照规则变成相应的元素,这里是把包含a的元素替换成了1,其他的不变----");
   list.stream().map(param -> param.contains("a") ? 1 : param).forEach(System.out ::println);



   System.out.println("----对于集合中重复的数据进行去重,把相同的数据去除,这里去除了d的重复元素----");
   list.stream().distinct().forEach(System.out ::println);


   System.out.println("----reduce是把集合里的数据组合起来,这里是把所有的元素组合成一个新的字符串----");
   System.out.println(list.stream().reduce((p1,p2) -> p1+p2).get());

   
   
   System.out.println("----collect是将原先的集合数据根据给定的条件筛选重新生成一个新的list集合返回----");
   list.stream().filter(p -> !p.contains("a")).collect(Collectors.toList()).forEach(System.out::println);
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot使用token简单鉴权的具体实现方法

    SpringBoot使用token简单鉴权的具体实现方法

    这篇文章主要介绍了SpringBoot使用token简单鉴权的具体实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • servlet实现文件上传、预览、下载、删除功能

    servlet实现文件上传、预览、下载、删除功能

    这篇文章主要为大家详细介绍了servlet实现文件上传、预览、下载、删除功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • SpringBoot前后端json数据交互的全过程记录

    SpringBoot前后端json数据交互的全过程记录

    现在大多数互联网项目都是采用前后端分离的方式开发,下面这篇文章主要给大家介绍了关于SpringBoot前后端json数据交互的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Spring Boot下如何自定义Repository中的DAO方法

    Spring Boot下如何自定义Repository中的DAO方法

    这篇文章主要介绍了Spring Boot下如何自定义Repository中的DAO方法,需要的朋友可以参考下
    2017-06-06
  • Java实现按照大小写字母顺序排序的方法

    Java实现按照大小写字母顺序排序的方法

    这篇文章主要介绍了Java实现按照大小写字母顺序排序的方法,涉及java数组遍历、编码转换、判断等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • java读取文件内容,解析Json格式数据方式

    java读取文件内容,解析Json格式数据方式

    这篇文章主要介绍了java读取文件内容,解析Json格式数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • IDEA远程连接HBase及其Java API实战详解

    IDEA远程连接HBase及其Java API实战详解

    这篇文章主要介绍了IDEA远程连接HBase及其Java API实战详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Maven多模块及version修改的实现方法

    Maven多模块及version修改的实现方法

    这篇文章主要介绍了Maven多模块及version修改的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Java设计模式中的抽象工厂模式解读

    Java设计模式中的抽象工厂模式解读

    这篇文章主要介绍了Java设计模式中的抽象工厂模式解读,抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,需要的朋友可以参考下
    2023-11-11
  • java编程scanner类用法示例

    java编程scanner类用法示例

    这篇文章主要介绍了java编程scanner类用法示例,涉及一个通过scanner类实现需要手动输入变量时进行输入的实例,然后分享了一个简单的eclipse对Java代码格式化的技巧,具有一定借鉴价值,需要的朋友可以参考。
    2017-11-11

最新评论