我正在尝试使用Java 8流而不是传统的for循环进行此迭代。
我有一个对象列表List<Obligation>
并且Obligation
中的List
中有String
。
Obligation
包含
f1
和f2
类型的String
和
f3
类型的List<String>
我想要实现的是Map<String, List<Obligation>>
,使得String
的键中使用的Map
是List<String>
中{ {1}}
这是代码在传统for循环中的外观:
Obligation
答案 0 :(得分:4)
使用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())));