java - 转换多值映射到地图>.object 是List的形式
问题描述
我试图获取响应标头,其格式为MultivaluedMap<String, Object>
.
对象的形式为List<String>
。
我想将它存储在一个Map<String, List<String>>
.
有没有直接的方法可以做到这一点?
解决方案
要将MultivaluedMap转换为Map<String,List<String>>
您可以执行以下操作:
首先创建一个转换List<Object>
为List<String>
(MultivaluedMap::get return a List<Object>
) 并返回 a 的方法Map<String,List<String>>
(以跟踪键)
public static Map<String,List of String> convertListObjectToListofString(String k, List<Object> object) {
List<String> list = object.stream()
.flatMap(obj -> new ArrayList<String>((Collection<String>)obj).stream())
.collect(Collectors.toList());
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put(k, list);
return map;
}
之后,您可以流式传输MultivaluedMap (.entrySet().stream())并使用convertListObjectToListofString将其转换为 Map<String, List> 并重新流式传输返回的地图以将所有结果收集到一张地图中( .flatMap(eS -> convertListObjectToListofString(eS.getKey(), eS.getValue()).entrySet().stream()) .collect(Collectors.toMap(eS->eS.getKey(), eS -> eS.getValue())); )
这里所有的代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
public class MapObjectToStringList {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>(Arrays.asList("a","b","c"));
List<String> list2 = new ArrayList<>(Arrays.asList("d","e","f"));
List<String> list3 = new ArrayList<>(Arrays.asList("g","h","i"));
List<String> list4 = new ArrayList<>(Arrays.asList("j","k","l"));
MultivaluedMap<String, Object> map = new MultivaluedHashMap<String, Object>();
map.add("aa", list1);
map.add("bb", list2);
map.add("cc", list3);
map.add("dd", list4);
Map<String, List<String>> collect = map.entrySet().stream()
.flatMap(eS ->convertListObjectToListofString(eS.getKey(), eS.getValue()).entrySet().stream())
.collect(Collectors.toMap(eS->eS.getKey(), eS -> eS.getValue()));
System.out.println(collect);
}
public static Map<String,List<String>> convertListObjectToListofString(String k, List<Object> object) {
List<String> list = object.stream()
.flatMap(obj -> new ArrayList<String>((Collection<String>)obj).stream())
.collect(Collectors.toList());;
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put(k, list);
return map;
}
}
PS:
此代码使用 java 8 运行,我将 javax.ws.rs-api-2.0.jar 添加到我的项目中
推荐阅读
- gradle - 集中 gradlew 更新
- scipy - 如何在 scipy ndimage 中增加标记特征
- swift - SwiftUI:List's Row 中作为参数的 var 和 let 有什么区别?
- javascript - generator.next 如何在此代码中导致异常
- javascript - net::ERR_ABORTED 404(未找到)- Javascript
- eslint - ESLint:解析错误:此实验性语法需要启用以下解析器插件之一:'jsx, flow, typescript' (2:9)
- java - 如何在 PayPal 支付网关中集成 3D Secure 身份验证?
- javascript - videojs:当 url 抛出 404 时,视频流加载
- python-3.x - 每当在 python 中调用任何函数时,默认执行某些操作
- office-js - 如何将侧面加载的 Outlook 加载项按钮固定到 OfficeOnline 中的功能区 (?)?