java - 将 Map<String, Object> 转换为 Map<String, List<Object>>

标签 java list dictionary

我正在尝试将映射值对象更改为列表值对象,以便单个键可以存储多个值。请找到代码片段。

  protected Subscriber updateSubscriberAttributes(Subscriber subscriber, Collection<SubscriberAttributeDto> subscriberAttributesCollection)
        throws ErrorException {
    // Do we have any custom attributes to store?
    if ((subscriberAttributesCollection != null) && !subscriberAttributesCollection.isEmpty()) {
        // Yes! Convert to a Map first.
        Map<String, Object> subscriberAttributesMap = new HashMap<String, Object>(subscriberAttributesCollection.size());
        for (SubscriberAttributeDto subscriberAttribute : subscriberAttributesCollection) {
            // Convert the input attribute value to a database-appropriate value
            SubscriberAttributeMetadata attrMetadata = subscriberAttribute.getAttributeMetadata();
            if (attrMetadata != null) {
                subscriberAttributesMap.put(attrMetadata.getColumnName(),
                        attrMetadata.convertToDatabaseValue((String) subscriberAttribute.getValue()));
            }
        }

        // Perform the update
        return updateSubscriberAttributes(subscriber, subscriberAttributesMap);
    } else {
        return subscriber;
    }
}

抱歉,代码有点乱。所以我在这里面临的麻烦是,如果我更改 subscribersAttributeMap 的声明至Map<String,List<Object>>我必须更改方法声明并抛出很多错误。我确实尝试了很长时间。

最佳答案

protected Subscriber updateSubscriberAttributes(Subscriber subscriber, Collection<SubscriberAttributeDto> subscriberAttributesCollection) throws ErrorException {
    // Do we have any custom attributes to store?
    if ((subscriberAttributesCollection != null) && !subscriberAttributesCollection.isEmpty()) {
        // Yes! Convert to a Map first.
        Map<String, List<Object>> subscriberAttributesMap = new HashMap<String, List<Object>>(subscriberAttributesCollection.size());
        for (SubscriberAttributeDto subscriberAttribute : subscriberAttributesCollection) {
            // Convert the input attribute value to a database-appropriate value
            SubscriberAttributeMetadata attrMetadata = subscriberAttribute.getAttributeMetadata();
            if (attrMetadata != null) {
                //
                String columnName = attrMetadata.getColumnName();
                List<Object> list = subscriberAttributesMap.get(columnName);
                if (list == null) {
                    list = new ArrayList<Object>();
                    subscriberAttributesMap.put(columnName, list);
                }
                //
                list.add(attrMetadata.convertToDatabaseValue((String) subscriberAttribute.getValue()));
            }
        }

        // Perform the update
        return updateSubscriberAttributes(subscriber, subscriberAttributesMap);
    } else {
        return subscriber;
    }
}

protected Subscriber updateSubscriberAttributes(Subscriber subscriber,  Map<String, List<Object>> map) throws ErrorException {
    // do some logic hiere ...
    return new Subscriber();
}

关于java - 将 Map<String, Object> 转换为 Map<String, List<Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220888/

相关文章:

java日期差异拼图

java - Amazon Simple Db 从列表中获取项目

java - Maven 项目安装到 jar,尝试访问路径时出现 404

C# For Loop with LIST 使用 LINQ

r - 如何在 R 中获取 AST 作为列表

java - 将在 native 代码中缓存 jclass 防止类被卸载

Python 2.7 - 从列表 y 中删除项目,而不从创建它的列表 x 中删除相同的项目

c# - 在一个对象中表示 n 个对象

javascript - 根据现有值重新排列 JSON 值

c++ - 无法使用对类型键设置映射值