关闭

Stream性能比较测试

1489人阅读 评论(0) 收藏 举报
分类:
测试环境:jdk1.8.0_60, guava-18.0.jar

toMap

    public static void demo1() {
        int size = 50000;
        List<String> list = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            list.add(Integer.toString(i));
        }

        System.out.println("size = " + size);
        long start2 = System.currentTimeMillis();
        Map<Integer, String> map3 = Maps.newHashMapWithExpectedSize(size);
//        for (int i = 0; i < size; i++) {
//            String string = list.get(i);
//            map3.put(string.hashCode(), string);
//        }
        for (String string : list) {
            map3.put(string.hashCode(), string);
        }
        long end2 = System.currentTimeMillis();
        System.out.println("iterator --- t = " + (end2 - start2));

        long start = System.currentTimeMillis();
        Map<Integer, String> map = list.parallelStream().collect(
                Collectors.toMap(s -> s.hashCode(), s -> s));
        long end = System.currentTimeMillis();
        System.out.println("stream --- t = " + (end - start));

        long start1 = System.currentTimeMillis();
        Map<Integer, String> map1 = Maps.uniqueIndex(list,//lists为value的列表
                new com.google.common.base.Function<String, Integer>() {
                    @Override
                    public Integer apply(String value) {//返回值是key,参数是value
                        return value.hashCode();
                    }
                });
        long end1 = System.currentTimeMillis();
        System.out.println("guava --- t = " + (end1 - start1));
    }
注意guava生成的Map类型。
测试结果:
size = 5000
iterator --- t = 25
stream --- t = 96
guava --- t = 26

size = 500000
iterator --- t = 148
stream --- t = 1533
guava --- t = 104

filter

    public static void demo2() {
        int size = 5000;
        List<String> list = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            list.add(Integer.toString(i));
        }

        System.out.println("szie = " + size);
        long start2 = System.currentTimeMillis();
        List<String> list2 = Lists.newArrayListWithCapacity(size);
        for (int i = 0; i < size; i++) {
            String string = list.get(i);
            if (Integer.valueOf(string) % 2 == 0) {
                list2.add(string);
            }
        }

        long end2 = System.currentTimeMillis();
        System.out.println("iterator --- t = " + (end2 - start2));

        long start = System.currentTimeMillis();
        List<String> list1 = list.parallelStream().filter(s -> Integer.valueOf(s) % 2 == 0)
                .collect(Collectors.toList());
        long end = System.currentTimeMillis();
        System.out.println("stream --- t = " + (end - start));
    }
测试结果:
szie = 5000
iterator --- t = 15
stream --- t = 100

szie = 500000
iterator --- t = 104
stream --- t = 133

anyMatch

    public static void demo3() {
        int size = 500000;
        List<String> list = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            list.add(Integer.toString(i));
        }

        System.out.println("szie = " + size);
        long start2 = System.currentTimeMillis();
        for (int i = 0; i < size; i++) {
            String string = list.get(i);
            if (string.endsWith("412347")) {
                break;
            }
        }

        long end2 = System.currentTimeMillis();
        System.out.println("iterator --- t = " + (end2 - start2));

        long start = System.currentTimeMillis();
        list.parallelStream().anyMatch(s -> s.endsWith("1234567"));
        long end = System.currentTimeMillis();
        System.out.println("stream --- t = " + (end - start));
    }
测试结果:
szie = 500000
iterator --- t = 84
stream --- t = 114






0
0
查看评论

Stream benchmark 测试及相关参数说明

Stream介绍Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,作为衡量服务器内存性能指标的通用工具。通过测试过程了解相关参数并记录如下(主要是编译过程的参数值设置),关于stream介绍可以参考如下官方网页 http://www.cs.virginia.edu/stream/ref...
  • ztq157677114
  • ztq157677114
  • 2016-07-18 12:29
  • 3938

STREAM Benchmark及其操作性能分析

STREAM Benchmark及其操作性能分析文/raywill     STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输...
  • maray
  • maray
  • 2011-03-08 10:50
  • 15941

内存测试Stream程序分析

Stream测试是内存测试中业界公认的内存带宽性能测试基准工具。作为一个服务器工程师在衡量和评比服务器的性能时,该如何从简单的一个源码使之编译成适合自己的可用的测试工具呢?让我们一起来学习这个基本过程吧。 首先我们看一下Linux下最简单的编译过程: 点击(此处)折叠或打开 ...
  • gml03361
  • gml03361
  • 2017-01-01 02:44
  • 598

内存测试Stream程序分析(一)--基本参数

Stream测试是内存测试中业界公认的内存带宽性能测试基准工具。作为一个服务器工程师在衡量和评比服务器的性能时,该如何从简单的一个源码使之编译成适合自己的可用的测试工具呢?让我们一起来学习这个基本过程吧。 首先我们看一下Linux下最简单的编译过程: 点击(此处)折叠或打开 ...
  • Michaelwubo
  • Michaelwubo
  • 2015-07-16 10:11
  • 2827

Java 8之Stream适用场景

Stream是Java 8中的一个大的改进。Stream的功能是,支持集合的各种操作,比如filter, sum, max, min, average, map, reduce等等。所以我个人认为Stream的出现是基于以下原因: 增强集合操作 拥抱函数式编程 充分利用Lambda 执行效率的提高 ...
  • kimylrong
  • kimylrong
  • 2015-08-14 17:53
  • 14570

java8 stream().forEach 效率

java8 stream().forEach 效率
  • kkkder
  • kkkder
  • 2017-09-12 16:36
  • 912

Stream 一

    在说Bus的时候就稍微的说到了Stream,Stream可以说是Bus的基础。        Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力...
  • yidan7063
  • yidan7063
  • 2018-02-11 16:18
  • 3

Java8中流的性能

原文:Performance With Java8 Streams 作者:Arun Pandey 翻译:雁惊寒 摘要:本文介绍了Java8中流的几个特性,以告诫开发者流并不是高性能的代名词,需谨慎使用流。以下是译文。流(Stream)是Java8为了实现最佳性能而引入的一个全新的概念。在...
  • dev_csdn
  • dev_csdn
  • 2017-11-09 16:41
  • 14948

Java8新特性——StreamAPI(一)

1. 流的基本概念1.1 什么是流?流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合。众所周知,集合操作非常麻烦,若要对集合进行筛选、投影,需要写大量的代码,而流是以声明的形式操作集合,它就像SQL语句,我们只需告诉流需要对集合进行什么操作,它就会自动进行操作,并...
  • u010425776
  • u010425776
  • 2016-08-28 11:41
  • 23518

Java8 Stream forEach()函数的效率问题

测试Java8 新迭代方式 forEach()
  • queshenhai
  • queshenhai
  • 2015-06-14 01:10
  • 9447
    个人资料
    • 访问:300658次
    • 积分:5467
    • 等级:
    • 排名:第5842名
    • 原创:203篇
    • 转载:243篇
    • 译文:0篇
    • 评论:26条