收集列表<对象>地图<字符串,列表<对象>>中的Java 8中使用流

akapti:

我试图用java 8个流代替传统的for循环做这个迭代。

我有对象的列表List<Obligation>Obligation正在为ListString范围内。

Obligation 包含像场

f1f2类型String

f3 类型 List<String>

我想实现的是Map<String, List<Obligation>>这样,String在关键的使用Map是各自存在的价值List<String>从每个ObligationList<Obligation>

这是代码将如何看传统的for循环:

// newly initialized Map
Map<String, List<Obligation>> map = new LinkedHashMap<String, List<Obligation>>();

// assume the list is populated
List<Obligation> obligations = someMethod();

                for(Obligation obligation : obligations) {
                    for(String license : obligation.getLicenseIDs()) {
                        if(map.containsKey(license)) {
                            map.get(license).add(obligation);
                        } else {
                            List<Obligation> list = new ArrayList<Obligation>();
                            list.add(obligation);
                            map.put(license, list);
                        }
                    }
                }
他们是:

使用flatMap创建的对流Obligation和许可证ID,然后使用groupingBy由许可证ID,并收集它们。

Map<String, List<Obligation>> map =
    obligations.stream() // Stream<Obligation>
               .flatMap(o -> o.getLicenseIDs()
                              .stream()
                              .map(id -> new SimpleEntry<>(o,id))) // Stream<Map.Entry<Obligation,String>>
               .collect(Collectors.groupingBy(Map.Entry::getValue,
                                              Collectors.mapping(Map.Entry::getKey,
                                                                 Collectors.toList())));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章