首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8中的流操作-基本使用&性能测试

一、流(Stream)简介 流是 Java8 中 API 的新成员,它允许你以声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。...例如下面代码就会抛出一个异常,说流已被消费掉了: List title = Arrays.asList("Wmyskxz", "Is", "Learning", "Java8", "In...已经对 Stream API 的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对 Stream API 的性能一探究竟。...测试方法和测试数据 性能测试并不是容易的事,Java性能测试更费劲,因为虚拟机对性能的影响很大,JVM对性能的影响有两方面: GC的影响。...分析,对于基本类型: 使用Stream并行API在单核情况下性能很差,比Stream串行API的性能还差; 随着使用核数的增加,Stream并行效果逐渐变好,比使用for循环外部迭代的性能还好。

1.1K10

Java8中的流操作-基本使用&性能测试

一、流(Stream)简介 ---- 流是 Java8 中 API 的新成员,它允许你以声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。...例如下面代码就会抛出一个异常,说流已被消费掉了: List title = Arrays.asList("Wmyskxz", "Is", "Learning", "Java8", "In...已经对 Stream API 的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对 Stream API 的性能一探究竟。...测试方法和测试数据 性能测试并不是容易的事,Java性能测试更费劲,因为虚拟机对性能的影响很大,JVM对性能的影响有两方面: GC的影响。...分析,对于基本类型: 使用Stream并行API在单核情况下性能很差,比Stream串行API的性能还差; 随着使用核数的增加,Stream并行效果逐渐变好,比使用for循环外部迭代的性能还好。

1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java8并行流

    在适当的时候合并 并且还需要关注多个线程之间共享变量的修改问题。而 Java8 为我们提供了并行流,可以一键开启并行模式。是不是很酷呢?让我们来看看。...并行流 认识和开启并行流 什么是并行流:并行流就是将一个流的内容分成多个数据块,并用不同的线程分别处理每个不同数据块的流。...一般来说采用处理器核心数是不错的选择 测试并行流的性能 为了更容易的测试性能,我们在每次计算完苹果价格后,让线程睡 1s,表示在这期间执行了其他 IO 相关的操作,并输出程序执行耗时,顺序执行的耗时:...当然当类型数目大于核心数时,该操作的性能提升就会打一定的折扣了。更好的优化方法在日后的博客会为大家奉上。...对于较少的数据量,不建议使用并行流 容易拆分成块的流数据,建议使用并行流 以下是一些常见的集合框架对应流的可拆分性能表 以下是一些常见的集合框架对应流的可拆分性能表:

    71130

    Java8的Stream流 _ JavaCoreII

    这些元素可能存储在底层的集合中,或者是按需生成。 流的操作不会修改其数据源。例如,filer方法不会从新的流中移除元素,而是会生成一个新的流,其中不包含被过滤掉的元素。 流的操作是尽可能惰性执行的。...、map和flatMap方法 流的转换会产生一个新的流,它的元素派生自另一个流中的元素。...这是单子论的关键概念。 抽取子流和连接流 stream.limit(n)会返回一个新的流,它在n个元素之后结果(如果原来的流更短,那么就会在流结束时结束)。...第一个流不应该是无限的,否则第二个流永远都不会得到处理的机会。 其他的流转换 distinct:返回一个流,它的元素是从原有流中产生的,即原来的元素按照同样的顺序剔除重复元素后产生的。...流的排序:有多种sorted方法的变体可用。 操作Comparable元素的流 接受一个Comparator sorted方法会产生一个新的流,它的元素是原有流中按照顺序排列的元素。

    94640

    Java8 Stream流

    第三章 Stream流 关注公众号(CoderBuff)回复“stream”获取《Java8 Stream编码实战》PDF完整版。...对于初学者,必须要声明一点的是,Java8中的Stream尽管被称作为“流”,但它和文件流、字符流、字节流完全没有任何关系。Stream流使程序员得以站在更高的抽象层次上对集合进行操作[1]。...也就是说Java8中新引入的Stream流是针对集合的操作。 3.1 迭代 我们在使用集合时,最常用的就是迭代。...但实际上,这里的filter操作是惰性求值,它并不会返回新的集合,这就是Stream流设计精妙的地方。既能在保证可读性的同时,也能保证性能不会受太大影响。...第三个参数在这里的确没有用,这是因为我们目前所使用的Stream流是串行操作,它在并行Stream流中发挥的是多路合并的作用,在下一章会继续介绍并行Stream流,这里就不再多做介绍。

    1.4K10

    Dating Java8系列之Java8中的‘流’

    翎野君/文 流的概念 1.流是什么 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。...3.流的特点 流的两个重要特点 流水线——很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个大的流水线。流水线的操作可以看作对数据源进行数据库式查询。...内部迭代——与使用迭代器显式迭代的集合不同,流的迭代操作是在背后进行的。 流与集合 1.流和集合之间的差异 集合与流之间的差异在于什么时候进行计算。...2.注意事项 请注意,和迭代器类似,流只能遍历一次。遍历完之后,我们就说这个流已经被消费掉了。 3.遍历数据时的区别 集合和流的另一个关键区别在于它们遍历数据的方式。...forEach和count等终端操作会返回一个非流的值,并处理流水线以返回结果。 流中的元素是按需计算的。

    12610

    java8新特性--并行流与串行流

    并行流与串行流 1、概述 2、实例 1、概述 并行流就是把一个内容分成多个数据块,并用不同的线程分 别处理每个数据块的流。 Java 8 中将并行进行了优化,我们可以很容易的对数据进行并 行操作。...Stream API 可以声明性地通过 parallel() 与 sequential() 在并行流与顺序流之间进行切换。...2、实例 若我们需要计算从0到1000000000L的累计和,若是普通的从0加到1000000000L,势必对cpu的利用率不高,我们做个测试 1、普通的累加和: long start = System.currentTimeMillis...: " + (end - start)); 从结果来看,差距并不是很大,有时候并行流执行时间比普通的累计还长,是因为并行流执行的时候会递归将计算进行差分,最后再将拆分的结果合并,会消耗掉一部分时间。...加大数据量,计算从0到10000000000L 1、普通累加和: 2、并行流计算 可以看到,数据已经溢出了,但是我们观察消耗时间可以发现,数据量越大,并行流的优势越明显

    51420

    Java8新特性—stream流的使用

    前言: 今天跟大家分享一下java8的新特性之一—流,肯定有很多人见到过,但是我相信目前很多人还没有广泛的使用流—可能暂时没有使用流的意识,或者说是使用的不熟练,如果真的是这样,那么今天分享的文章肯定会给你带来巨大的冲击...一、热身运动 流可以帮助我们写出更优雅且高性能的代码,比如有这样一个场景,比如你有一个女朋友(没有的话就new一个吧),然后你女朋友的包包中装了很多的东西,现在需要将你女朋友的包包中的东西都拿出来,如果我们使用传统的迭代器...那么如果我们使用java8的流操作将会是下面的场景: 你:媳妇儿,把你包包里面的东西都拿出来放到桌子上 就是这么简单,我们下面来详细的学习一下流的操作 上面的实例可能有些人会觉得集合也能用一些清空的操作啊...: for循环遍历了两次,带来性能问题 List lowCaloriesSort仅仅是一个中间容器,即“垃圾变量” 代码写的很长,看上去不美观 那么我们引入java8代码将会编程怎么样子的呢...到这里流的基本的操作算是介绍完了,这篇文章就写道这里吧,后面会更加深入的还会介绍一些流的更高级的使用。

    75720

    Java8学习之Stream(流)

    东西就是这么多啦,stream是java8中加入的一个非常实用的功能,最初看时以为是io中的流(其实一点关系都没有),让我们先来看一个小例子感受一下: @Before public void init(...,并按照分数降序输出用户名字,在java8之前我们需要三个步骤: 1)新建一个ListnewList,在for循环中遍历stuList,将分数超过85分的学生装入新的集合中 2)对于新的集合newList...注:当我们操作一个流的时候,并不会修改流底层的集合(即使集合是线程安全的),如果想要修改原有的集合,就无法定义流操作的输出,由于stream的延迟执行特性,在聚合操作执行前修改数据源是允许的。...原始类型流的初始化 2、原始类型流与流对象的转换 DoubleStream doubleStream; IntStream intStream; /** * 原始类型流的初始化 */ @Before...1、并行流的执行顺序 我们调用peek方法来瞧瞧并行流和串行流的执行顺序,peek方法顾名思义,就是偷窥流内的数据,peek方法声明为Streampeek(Consumer action);加入打印程序可以观察到通过流内数据

    1.1K20

    初识Java8 Stream、流的基本操作

    流,就是数据流,是元素序列,在Java8中,流的接口定义在 java.util.stream.Stream包中,并且在Collection(集合)接口中新增一个方法: 1default Stream的筛选动作外,还有去重,分页等功能,那java8的流API能支持这些操作吗? 答案当然是肯定。...Map 还是类比数据库操作,我们通常可以只选择一个表中的某一列,java8流操作也提供了类似的方法。...例如,我们需要从菜单中提取所有菜品的名称,在java8中我们可以使用如下代码实现: 1版本1:List dishNames = menu.stream().map( (Dish d) -...当然,java为了高效的处理基础数据类型(避免装箱、拆箱带来性能损耗)也定义了如下方法: 1IntStream mapToInt(ToIntFunction<?

    83910
    领券