我正在尝试使用流API代替循环,并遇到以下问题。
我有一个方法,该方法接受一个Enum并返回SortedMap。我将每个地图存储在一个列表中,但是现在我希望现在将每个SortedMap存储在一个以Enum名称为键且从listCritieraResults()
返回的SortedMap的地图中作为值,如何使用流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));
}
如果要将标准用作地图的键,请使用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)));
或者如果在c.name()
中使用toMap
,则使用字符串作为Map键
Map<String ,SortedMap<Date,String>> map = Arrays.stream(Criteria.values()).collect(Collectors.toMap(c -> c.name(), c -> searcher.listCritieraResults(c)));
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(),它将返回一个字符串而不是Enum Criteria