如何将Enum.values()映射/收集到HashMap >

问题描述 投票:0回答:2

我正在尝试使用流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));
        }
java java-8 enums
2个回答
3
投票

如果要将标准用作地图的键,请使用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)));

1
投票
 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

© www.soinside.com 2019 - 2024. All rights reserved.