当前位置: 首页 > 知识库问答 >
问题:

如何映射/收集枚举。values()到HashMap

郭知
2023-03-14

我试图使用流API代替循环,并有以下问题。

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

当前工作列表方法

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

我使用收集器的错误尝试。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));
        }

共有2个答案

鄂坚
2023-03-14
 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(),它将返回一个字符串,而不是枚举条件

姬墨竹
2023-03-14

使用地图

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

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

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

 类似资料:
  • 问题内容: 假设我有这个枚举: 通过以下映射: 枚举被发送到数据库,,。我希望这些值改为存储为,或存储在varchar列中。 如何将枚举映射到varchar列? 问题答案: 将其添加为EnumType的参数: 这是因为等效于java.sql.Types.VARCHAR

  • 问题内容: 我需要预先将未实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate本身是否支持此功能?)。 问题答案: 可以创建一个自定义(例如thi

  • 问题内容: Hibernate提供的注释支持使用或的两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即hibernate尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了

  • 问题内容: 我有以下枚举如何在jna中映射? 该枚举在结构上进一步引用。 阿卜杜勒·哈利克(Abdul Khaliq) 问题答案: 如果使用的是JNA,则可能要显式指定Java中的枚举值。默认情况下,Java的基本枚举类型并没有真正为您提供该功能,您必须为EnumSet添加一个构造函数(请参阅this和this)。 编码C枚举的一种简单方法是使用包装在与枚举同名的类中的公共静态最终const in

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th