假设我有一个国家/地区对象列表,其中包含该国家/地区使用的语言列表,如下所示:
class Country {
List<String> languages;
}
我想创建以下格式的 map :
Map<String, List<Country>>
,这样每种语言都会映射到 Country 对象的列表。例如:
"French" -> [Country:France, Country:Canada],
"English" -> [Country:UK, Country:US]
性能是这里的一个问题,所以我想避免多次迭代和查找。我尝试过使用 groupingBy
,但是我该怎么办flatMap
键集?
例如,这会导致 Map<List<String>, List<Country>>
:
countries.stream()
.collect(Collectors.groupingBy(country -> country.getLanguages(), toList()));
最佳答案
由于您似乎关心性能,因此不要使用流来完成这个简单的任务:
Map<String, List<Country>> countriesByLanguage = new HashMap<>();
for (Country country : countries) {
for (String language : country.getLanguages()) {
countriesByLanguage.computeIfAbsent(language, k -> new ArrayList<>())
.add(country);
}
}
关于Java流: groupingBy and flatMapping keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55360374/