java8 用strem流處理集合的例子 list轉Set、Map

 

一. 需求:遍歷List集合,集合中的對象的某個字段是以 逗號分割的,把分割後的值保存在Set集合中

普通的寫法:

        Set<String> cfgPortfolioSet = new HashSet<>(20);
        for (CfgPortfolio cfgPortfolio : cfgPortfolioList) {
            String compreftmp = cfgPortfolio.getComprefs();
            if(!StringTools.isTrimEmpty(compreftmp)){
                String[] split = compreftmp.split(",");
                for (String s : split) {
                    cfgPortfolioSet.add(s);
                }
             
            }
        }

java 8 stream流的寫法:

一行代碼搞定

Set<String>  cfgPortfolioSet = cfgPortfolioList.stream().flatMap(cfgPortfolio -> {
            if (StringTools.isTrimEmpty(cfgPortfolio.getComprefs())) {
                return null;
            }
            return Arrays.stream(cfgPortfolio.getComprefs().split(","));
        }).collect(Collectors.toSet());

二. 將list集合轉Set

普通list的轉集合 是for語句遍歷list,stream流直接一句代碼

        // list 轉 Set
        List<Man> manList = new ArrayList<>();
        Man man = new Man();
        man.setId("1");
        man.setName("人");
        manList.add(man);

        Set<Man> manSet =  manList.stream().collect(Collectors.toSet());
        manSet.contains("1");
        Iterator<Man> iterable =  manSet.iterator();
        while (iterable.hasNext()){
            System.out.println(iterable.next().getId());
        }

 

 

三. 將list集合轉Map


        List<Man> manList = new ArrayList<>();
        manList.add(new Man("1", "人"));
        manList.add(new Man("1", "我"));

        //list to map 無重複key的時候
       // Map<String, Man> map1 = manList.stream().collect(Collectors.toMap(Man::getId, test->test));
        //System.out.println(map1.get("1").getName());

        //list to map 有重複key的時候
        Map<String, Man> map = manList.stream().collect(Collectors.toMap(Man::getId, Function.identity(),(test1, test2) -> test1 ));
        System.out.println(map.get("1").getName());

        //list to map value值取單個字段時
        Map<String, String> mapname1 = manList.stream().collect(Collectors.toMap(Man::getId, Man::getName, (man1,man2)-> man1 ));
        System.out.println(mapname1.get("1"));

        //list to map value值拼接
        Map<String, String> mapcomb = manList.stream().collect(Collectors.toMap(Man::getId, Man::getName, (key1, key2)-> key1+","+key2));
        System.out.println(mapcomb.get("1"));

        // list轉map, 重複時將重複key的數據組成集合
        Map<String, List<String>> maplist = manList.stream().collect(Collectors.toMap(Man::getId, p ->{
            List<String> list = new ArrayList<>();
            list.add(p.getName());
            return list;
        }, (List<String> value1, List<String> value2 )-> {value1.addAll(value2); return  value1;}));
        System.out.println(maplist.get("1").toString());

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章