gpt4 book ai didi

java - 使用流将 List 收集到 Java 8 中的 Map>
转载 作者:搜寻专家 更新时间:2023-11-01 02:18:56 26 4
gpt4 key购买 nike

我正在尝试使用 java 8 流而不是传统的 for 循环来执行此迭代。

我有一个对象列表 List<Obligation>ObligationListString内。

Obligation包含类似

的字段

f1f2类型 String ,

f3类型 List<String>

我要实现的是Map<String, List<Obligation>>这样,String用于 Map 的 key 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())));

关于java - 使用流将 List<Object> 收集到 Java 8 中的 Map<String, List<Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57069046/

26 4 0