java - 优化MapcomputeIfPresent方法的java代码

标签 java

我有以下方法,其中我从实体中提取值,然后将其设置在映射中作为该映射的值,但我的观点是,对于每个键,我显式设置值,因此如果键增长,方法代码也会增长,我可以基于方法 Map.computeIfPresent 制作一个通用方法吗,请告知我如何实现这两件事

   private void setMap(AbcLoginDTO abcLoginDTO, Map<String, Object> getMap) {
        getMap.put("XXNAME", abcLoginDTO.getUsername());
        getMap.put("XX_ID", abcLoginDTO.getClientId());
        getMap.put("RR_ID", abcLoginDTO.getUserId());
        getMap.put("QQ_TIME", abcuserLoginDTO.getLocktime());
    }

我正在考虑类似下面的方法

static <E> void setIfPresent(Map<String, Object> map, String key, Consumer<E> setter, Function<Object, E> mapper) {
        Object value = map.get(key);
        if (value != null) {
            setter.accept(mapper.apply(value));
        }
    }

最佳答案

but my point is that for each key I am setting the value explicitly so if the count of keys grows that method code will also grow

您需要使用 DTO 中的不同值填充 Map,因此您没有其他选择。
该方法很长,因为您在 Map 中添加的键和从 DTO 检索的值之间没有映射。

您可以使用以下函数编写代码:

static void setValueInMap(Map<String, Object> map, String key, Supplier<Object> mapper) {
    map.put(key, mapper.get());
}

并使用它:

Map<String, Object> map = ...;
AbcLoginDTO dto = ...;
setIfPresent(map, "keyUserName", dto::getUserName);
// and so for 

但没有真正的优势。

您的第二个片段与第一个片段完全没有关系。

关于java - 优化MapcomputeIfPresent方法的java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746751/

相关文章:

java - 语法错误 : Unterminated quoted string in Maven project

java - 如何更改jbpm 6.5的kie工作台前端?

java - 我正在开发一款 Android 电子邮件客户端应用程序。我在读取多部分消息正文时遇到问题

java - 将字符串时间戳转换为日期

java - 软键盘: Adjust_Resize pushing content offscreen

java - 在 PaintComponent() 内创建时,JTextField 出现在 2 个位置

java - Insert 上没有写@CreatedDate 注释的字段,@LastModifiedDate 是

java - 为什么 "class"用于 Java 中的类?

java - I18n - 数据位于一种语言环境中,ui 位于另一种语言环境中,我应使用哪种语言环境进行排序?

java - 测量执行代码所花费的时间