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

關於Stream和Map的巧用

2022-07-06 17:04: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://yzsam.com/2022/187/202207060928057706.html