如何将 Enum.values() 映射/收集到 HashMap<Enum,SortedMap<Date,String>>



我正在尝试使用流 API 代替循环,并遇到以下问题。

我有一个方法,它接受一个枚举并返回一个排序映射。我将每个映射存储在一个列表中,但是我现在希望将每个 SortedMap 存储在一个映射中,其中 Enum 名称是键,而 SortedMap 是从listCritieraResults()返回的 作为值,如何使用流 API 执行此操作?

当前工作列表方法

List<SortedMap<Date, String>> collectedMaps = Arrays.stream(Criteria.values())
.map(searcher::listCritieraResults)
.collect(Collectors.toList());

我使用Collectors.toMap.的错误尝试。

Map<String,SortedMap<Date,String>> map = new HashMap<>();
map = Arrays.stream(Criteria.values()).collect(Collectors.toMap(c -> c.name(),c -> searcher.listCritieraResults(c)));

工作回路

Map<Critiera, SortedMap<Date, String>> map = new HashMap<>();
for ( Criteria criteria : Criteria.values()){
map.put(criteria.name(),searcher.listCritieraResults(criteria));
}
HashMap<Criteria,SortedMap<Date,String>> map = new HashMap<>();
map = Arrays.stream(Criteria.values()).collect(Collectors.toMap(c -> c.name(),c -> searcher.listCritieraResults(c)));

在这种情况下,您调用 c.name((,它将返回一个字符串而不是枚举条件

如果要将条件作为地图的键,请使用Map<Criteria,SortedMap<Date,String>>并使用条件作为toMap中的键。

Map<Criteria,SortedMap<Date,String>> map = Arrays.stream(Criteria.values()).collect(Collectors.toMap(c -> c, c -> searcher.listCritieraResults(c)));

或者,如果您在toMap中使用c.name(),请使用字符串作为映射键

Map<String ,SortedMap<Date,String>> map = Arrays.stream(Criteria.values()).collect(Collectors.toMap(c -> c.name(), c -> searcher.listCritieraResults(c)));

相关内容

  • 没有找到相关文章

最新更新