【开发】开发中关于循环的一件小事~

2020-03-13  本文已影响0人  不喜欢默认头像137

小事的背景

在日常业务开发的过程中,大家肯定有把一个List转成另外一个List的场景,Java8出了很久,流这个新的特性大家玩的也特别好了,所以这种场景,大家写的越来越🌹🍐🐯🔥~
知道有一天,一个十年资深Java高级开发工程师甩给我一个分支,让我学习,我看到了下面这段代码~


代码

为了狗命,所以代码打了厚🐎,大佬们凑活看,心中无🐎,自然万物无🐎
然后我就开始分析了。


image.png
image.png
image.png
image.png

经过一顿分析后,分析失败,不过大佬这么写一定有大佬的道理,但是咱也不敢问,本着热爱学习的态度,我觉得做个实验。


image.png

讲理咱嘴笨,就喜欢敲代码

image.png

菜狗一顿操作,做个实验吧

public class Solution {
    private static List<String> strings;

    static {
        strings = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            strings.add(i + "");
        }
    }

    private static List<Integer> resultStrings = new ArrayList<>();

    /**
     * 不用啥新特性,老老实实用循环 朴实无华
     */
    private static void function1() {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        for (String s : strings) {
            resultStrings.add(Integer.valueOf(s));
        }
        stopWatch.stop();
        log.info("朴实无华 result size = {}, cost time = {}", resultStrings.size(), stopWatch.getNanoTime());

    }

    /**
     * 资深开发工程师 写法
     */
    private static void function2() {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        strings.stream().forEach(a -> {
            Integer i = Integer.valueOf(a);
            resultStrings.add(i);
        });

        stopWatch.stop();
        log.info("资深开发 result size = {}, cost time = {}", resultStrings.size(), stopWatch.getNanoTime());

    }

    /**
     * 常规流的应用
     */
    private static void function3() {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();

        resultStrings = strings.stream().map(Integer::new).collect(Collectors.toList());

        stopWatch.stop();
        log.info("常规写法 result size = {}, cost time = {}", resultStrings.size(), stopWatch.getNanoTime());

    }

    /**
     * 开始实验吧
     *
     * @param args
     */
    public static void main(String[] args) {
        log.info("现在是北京时间 = {}", LocalDateTime.now());
        function1();
        function2();
        function3();
    }
}

整理一下实验结果

实验序号 结果
1
2
3
4
5
image.png

感觉分析不出来~~ 然后把List扩大到一百万,然后循环20次这个实验,结论




一顿操作之后,我发现,这三种写法在时间上其实都有快有慢,真的说不好~~

结尾

从效率上很难说谁快谁慢,各有优劣,而且循环百万List的场景也不是很常见,日常开发循环的哪些数组也难从这种细节写法上优化多少多少。
但就从写法上来说,个人觉得不太好看,都已经用了流了,还是想生成另外一个数组的这种场景,为什么不用map?是因为不香么?

菜逼小开发,在这瞎bb一通,各位大佬轻点喷,如果有谁能知道这种写法的好处,求指导~

菜逼小开发,在这瞎bb一通,各位大佬轻点喷,如果有谁能知道这种写法的好处,求指导~

菜逼小开发,在这瞎bb一通,各位大佬轻点喷,如果有谁能知道这种写法的好处,求指导~

上一篇下一篇

猜你喜欢

热点阅读