我正在尝试使用流 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)));