简体   繁体   English

如何将 Enum.values() 映射/收集到 HashMap <enum,sortedmap<date,string> &gt; </enum,sortedmap<date,string>

[英]How to Map/Collect Enum.values() to HashMap<Enum,SortedMap<Date,String>>

I am trying to make use of the stream API in place of loops, and have the follow problem.我正在尝试使用 stream API 代替循环,并遇到以下问题。

I have a method which takes an Enum and returns a SortedMap.我有一个方法,它接受一个枚举并返回一个 SortedMap。 I store each map in a list, however I now wish to now store each SortedMap in a map with the Enum name being the key and the SortedMap returned from listCritieraResults() as the value, how can I do this with the streams API?我将每个 map 存储在一个列表中,但是我现在希望将每个 SortedMap 存储在 map 中,其中 Enum 名称是键,从listCritieraResults()返回的 SortedMap 作为值,我如何使用流 ZDB97423CE87083A 来做到这一点?

Current working List Method当前工作列表方法

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

My incorrect attempt to use Collectors.toMap..我错误地尝试使用 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)));

Working loop工作回路

Map<Critiera, SortedMap<Date, String>> map = new HashMap<>();

        for ( Criteria criteria : Criteria.values()){
            map.put(criteria.name(),searcher.listCritieraResults(criteria));
        }

Use Map<Criteria,SortedMap<Date,String>> and use Criteria as key in toMap if you want to Criteria as Map's key.如果要将 Criteria 作为 Map 的键,请使用Map<Criteria,SortedMap<Date,String>>并使用 Criteria 作为toMap中的键。

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

Or use string as Map key if you use c.name() in toMap或者,如果在toMap中使用c.name() ,则使用字符串作为 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)));

In this, you are calling c.name() which will return a string and not Enum Criteria在此,您正在调用 c.name() 它将返回一个字符串而不是 Enum Criteria

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM