当前位置:网站首页>关于Stream和Map的巧用

关于Stream和Map的巧用

2022-07-06 09:30:00 机智的爆爆哥

题目是这样的
//假设db中有两个这样的表 数据有100w 最终要返回的是Provice表的List集合 如果status为fasle 则不返回 如何在java层面解决呢?


public class Mydemo {
       
    static ArrayList<Province> provinces = new ArrayList<>();
    static ArrayList<ProvinceStatus> provinceStatusList = new ArrayList<>();

    static {
    
        for (int i = 0; i < 10000; i++) {
    
            Province province = new Province();
            ProvinceStatus provinceStatus = new ProvinceStatus();
            province.setName(UUID.randomUUID().toString());
            province.setProvinceId(i);
            provinceStatus.setProvinceId(i);
            provinceStatus.setStatus(new Random().nextBoolean());
            //添加
            provinces.add(province);
            provinceStatusList.add(provinceStatus);
        }
        System.out.println("显示的列表大小为:" + provinceStatusList.stream().filter(ProvinceStatus::getStatus).count());
    }

    public static void main(String[] args) {
    
        ArrayList<Province> resList = new ArrayList<>();


        System.out.println("最终显示的个数:" + resList.size());

    }
}

@Data
class Province {
    
    private Integer provinceId;
    private String name;
}

@Data
class ProvinceStatus {
    
    private Integer provinceId;
    private Boolean status;
}

答案如下,有更好的想法请留言哦!

public static void main(String[] args) {
    
        //双重for循环? 不 用hash是个好办法
        long start1 = System.currentTimeMillis();
        System.out.println();
        Map<Integer, Boolean> map = provinceStatusList.stream()
                .collect(Collectors.toMap(ProvinceStatus::getProvinceId, ProvinceStatus::getStatus));
        ArrayList<Province> resList = new ArrayList<>();
        for (Province province : Mydemo.provinces) {
    
            if (map.get(province.getProvinceId())) {
    
                //显示这些
                resList.add(province);
            }
        }
        long start2 = System.currentTimeMillis();
        System.out.println("用时:" + (start2 - start1));
        System.out.println("最终显示的个数:" + resList.size());

    }
}

实测在数据量大的时候,并行流反而速度更慢,应该是因为没有经过什么计算,毕竟并行流适合CPU密集型的任务,即包含大量计算的时候使用。

原网站

版权声明
本文为[机智的爆爆哥]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_44353507/article/details/122146097