到多值映射,java,hashmap,type-conversion,multivalue"/>

首页 > 解决方案 > 多值映射到多值映射

问题描述

我有一个MultivaluedMap<String, String> strMap我想转换为MultivaluedMap<String, Object> objMap.

我尝试在下面的帖子中探索一些路线,但它们似乎都不起作用。

将 Map<String,String> 转换为 Map<String,Object>

标签: javahashmaptype-conversionmultivalue

解决方案


我今天也遇到了同样的问题,经过大量搜索,我想出了以下解决方案:

public static MultivaluedMap<String, Object> asObjectHeaders(MultivaluedMap<String, String> headers) {
    if (headers == null) {
        return null;
    } else {
        MultivaluedMap<String, Object> map = new MultivaluedHashMap<>();
        for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
            if (entry.getValue() != null) {
                map.addAll(entry.getKey(), new LinkedList<Object>(entry.getValue()));
            }
        }
        return map;
    }
}

或者,如果您使用的是 Guava,那么您可以使用以下代码:

public static MultivaluedMap<String, Object> asObjectHeaders(MultivaluedMap<String, String> headers) {
    if (headers == null) {
        return null;
    } else {
        return new AbstractMultivaluedMap<String, Object>(Maps.transformValues(headers, new Function<List<String>, List<Object>>() {
            @Override
            public @Nullable List<Object> apply(@Nullable List<String> strings) {
                if (strings != null) {
                    return new LinkedList<>(strings);
                } else {
                    return null;
                }
            }
        })) {};
    }
}

或者,如果您使用的是 jersey 客户端 glassfish,那么您可以使用以下内容:

public static MultivaluedMap<String, Object> asObjectHeaders(MultivaluedMap<String, String> headers) {
    if (headers == null) {
        return null;
    } else {
        return new AbstractMultivaluedMap<String, Object>(Views.mapView(headers, LinkedList::new)) {};
    }
}

推荐阅读