Stream学习(二)

Stream学习-性能差距(二)

一、性能差距

1、很是好奇新的方法跟之前的循环遍历之间的性能差距有多少,简单测试了下,代码如下:

package com.example.demo;

import com.example.demo.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;


@SpringBootTest
public class DemoApplicationTests {
    @Test
    public void testStreamEfficiency(){
        List<User> list = new ArrayList<>();
        User user = null;
        for (int i = 0; i < 10000; i++) {
            user = new User();
            user.setId(i);
            user.setName("zhangsan" + i);
            user.setAge(18 + i);
            list.add(user);
        }

        //1、筛选年龄为偶数的用户
        Long l1 = System.currentTimeMillis();
        //1.1使用传统遍历筛选
        List<User> resultList = new ArrayList();
        for (User u : list){
            if (u.getAge() % 2 == 0){
                resultList.add(u);
            }
        }
        System.out.println("1/原始方式结束时间差 ----------- " + (System.currentTimeMillis() - l1));

        //1.2使用stream筛选
        Long l2 = System.currentTimeMillis();
        List<User> resultList2 = new ArrayList();
        resultList2 = list.stream().filter( u -> u.getAge() % 2 == 0).collect(Collectors.toList());
        System.out.println("1/stream筛选开结束时间差 ----------- " + (System.currentTimeMillis() - l2));


        //2、双重遍历筛选
        //2.1原始方式双重循环筛选用户
        Long l3 = System.currentTimeMillis();
        List<User> list1 = new ArrayList<>();
        for (int i = 0; i < 10000 ; i+=2) {
            int i1 = i;
            for (User u : list){
                if (u.getAge() == i1){
                    list1.add(u);
                }
            }
        }
        System.out.println("2/原始方式筛选用户时间差 ----------- " + (System.currentTimeMillis() - l3));

        //2.2使用stream筛选用户
        Long l4 = System.currentTimeMillis();
        List<User> list2 = new ArrayList<>();
        for (int i = 0; i < 10000; i+=2) {
            int i2 = i;
            list2.addAll(list.stream().filter(u -> (u.getAge()== i2)).collect(Collectors.toList()));
        }
        System.out.println("2/stream筛选用户时间差 ----------- " + (System.currentTimeMillis() - l4));

        //2.3原始方式双重循环筛选获取属性字段
        Long l5 = System.currentTimeMillis();
        List<String> list3 = new ArrayList<>();
        for (int i = 0; i < 10000 ; i+=2) {
            int i1 = i;
            for (User u : list){
                if (u.getAge() == i1){
                    list3.add(u.getName());
                }
            }
        }
        System.out.println("2/原始方式筛选字段时间差 ----------- " + (System.currentTimeMillis() - l5));

        //2.4使用stream筛选属性字段
        Long l6 = System.currentTimeMillis();
        List<String> list4 = new ArrayList<>();
        for (int i = 0; i < 10000; i+=2) {
            int i2 = i;
            list4.addAll(list.stream().filter(u -> (u.getAge()== i2)).map(User::getName).collect(Collectors.toList()));
        }
        System.out.println("2/stream筛选字段时间差 ----------- " + (System.currentTimeMillis() - l6));
    }
}

2、结果如下图,多次测量结果差不太多,基本如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值