如何把这段for循环的代码改成lambda?

try {

            List<DataDictDO> list = dataDictDao.getAllList("dataDictMapper.getDataDictInfo", null);

            DataDictDO bean;

            String itemName;

            String colName;

            DATA_DICT_MAP.clear();

            for (int i = 0; i < list.size(); i++) {

                bean = list.get(i);

                itemName = bean.getItemName();

                colName = bean.getColName();

                Map<String, String> beanMap;

                String itemNameColName = (itemName + "-" + colName);

                if (DATA_DICT_MAP.containsKey(itemNameColName)) {

                    beanMap = DATA_DICT_MAP.get(itemNameColName);

                } else {

                    beanMap = new HashMap<String, String>();

                }

                beanMap.put(bean.getItemVal(), bean.getItemDesc());

                DATA_DICT_MAP.put(itemNameColName, beanMap);

            }

        } catch (Exception e) {

            LOG.error("加载数据字典缓存失败!!!", e);

        }


守着一只汪
浏览 1770回答 3
3回答

慕侠2389804

DATA_DICT_MAP = list.stream().collect(Collectors.groupingBy(&nbsp; &nbsp; &nbsp; &nbsp; it -> it.getItemName() + "-" + it.getColName(),&nbsp; &nbsp; &nbsp; &nbsp; Collectors.toMap(DataDictDO::getItemVal, DataDictDO::getItemDesc)));大致思路是这样的,用lambda来实现list转map有以下两种常用方式。一种是groupingBy,会将同一个key收集到的东西添加一个List当中。Map<String, List<Foobar>> collected = listOfFoobar.stream().collect(Collectors.groupingBy(Foobar::getKey));另一种是toMap,一个key只有对应一个value。Map<String, Foobar> collected = listOfFoobar.stream().collect(Collectors.toMap(Foobar::getKey, Function.identity(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (dup1, dup2) -> dup1));你的问题正好是需要结合这两者,第一步是需要按key聚合,这时候DataDictDO会有多个重复的。第二步则是将包含这些重复对象的列表再根据另一个key做一次聚合,是不重复的。而java.util.stream.Collectors#groupingBy(java.util.function.Function<? super T,? extends K>, java.util.stream.Collector<? super T,A,D>)这个方法正好可以将这两个步骤串在一起。具体可以看一下它的javadoc。

手掌心

可以这样list.forEach(l ->{&nbsp; &nbsp; // l是list元素&nbsp; &nbsp; ...}不过lambda表达式里面不能改变外部对象的引用,显然你的代码不适用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java