我有以下方法,其中我从实体中提取值,然后将其设置在映射中作为该映射的值,但我的观点是,对于每个键,我显式设置值,因此如果键增长,方法代码也会增长,我可以基于方法 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/