java8 in action行为参数化

行为参数化:
拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用,这意味着你可以推迟这块代码的执行,例如你可以将代码块作为参数传递给另一个方法,稍后再去执行它。这样这个方法的行为就基于那块代码被参数化了。

List<Apple> greenApples = filterApples(inventory,
                FilteringApples::isGreenApple);//方法引用:静态类的静态方法
        //FilteringApples::isGreenApple表示接收一个FilteringApples参数并返回一个boolean给filterApples(),
        //而filterApples则希望接收一个Predicate<Apple>参数。
        //Predicate谓词在数学上常常用来代表一个类似函数的东西,它接收一个参数值,并返回true或false,java8也允许你写Function<Apple,Boolean>,但用Predicate<Apple>是更标准的方式,效率也会更高一点,避免了将boolean封装到Boolean中。

和Collection API相比,Stream API处理数据的方式非常不同,用集合的话,你得自己去做迭代的过程,你得用for-each循环一个个去迭代元素,然后再处理元素。我们把这种数据迭代的方法称为外部迭代。而Stream API数据处理完全是在库内部进行的,我们把这种思想称作内部迭代。
java8利用Stream API解决了两个问题:集合处理时的套路和晦涩,以及难以利用的多核。
第一个问题:集合处理时的套路,我们在处理集合时要写很多套路代码,有了Stream,代码变的简洁。第二个问题:以及难以利用的多核,使用Stream,这些操作可以并行化。比如在两个CPU上筛选列表,可以让一个CPU处理列表的前一半,第二个CPU处理列表的后一半。然后CPU对各自的半个列表做筛选,最后,两个CPU把筛选结果合并起来。并行化利用了多核,并提高了效率。

Stream API和Collection API的行为差不多,它们都能够访问数据项目的序列,不过,Collection主要是为了存储和访问数据,而Stream则主要用于描述对数据的计算,Stream允许并提倡并行处理一个Stream中的元素。但筛选一个Collection的最快方法常常是将其转换为Stream,进行并行处理,然后再转换回List.

//如何利用Stream和lambda表达式顺序或并行地从一个列表里筛选出比较重的苹果。
//1,顺序处理:
        List<Apple> heavyApples1 = inventory.stream().
                filter((Apple apple) -> 150<apple.getWeight()).collect(Collectors.toList());
//2,并行处理

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,177评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • Streams 原文链接: Streams 原文作者: shekhargulati 译者: leege100 状态...
    忽来阅读 10,856评论 3 32
  • 1、 简单命令 ls: 列出目录cd:打开目录mkdir:创建文件夹rmdir:删除文件夹rm: 删除文件 2、 ...
    落地成佛阅读 1,639评论 0 0
  • 小时候看书,常看到某某某才子天赋异禀,聪明异常,读起书来一目十行。 当时一声哇,还有这么厉害的人啊。 现在再看这种...
    老猪说人间阅读 8,765评论 0 0

友情链接更多精彩内容