我有一个字符串数组列表,例如:
ArrayList<String> result = new ArrayList<String>() ;
result.add("Name.A");
result.add("Name.B");
result.add("Name.C");
result.add("Type.D");
result.add("Type.E");
result.add("Type.F");
现在我需要将一个键(在点之前)转换为HashMap到多个值(在点之后)。
像这样:Map<String,String[]> map = new HashMap<>();
地图(名称= A,B,C)
地图(类型= D,E,F)
不知道怎么做。任何帮助将不胜感激
Response response
= given().
relaxedHTTPSValidation().
accept(ContentType.JSON).
when().
urlEncodingEnabled(true).
get(uri).
then().
extract().response();
List<String> actual = response.jsonPath().getList("RESPONSE.A_VALUE");
Map<String, String[]> map = new HashMap<>();
for (String pair : actual) //iterate over the pairs
{
if (pair.contains(".")) {
String[] pair_values = pair.split("\\.");
map.put(pair_values[0].trim(), pair_values[1].trim());
}
}
答案 0 :(得分:1)
ArrayList<String> result = new ArrayList<String>() ;
result.add("Name.A");
result.add("Name.B");
result.add("Name.C");
result.add("Type.D");
result.add("Type.E");
result.add("Type.F");
Map<String, List<String>> returnValue = result.stream()
.map(p -> p.split("\\.", 2))
.filter(p -> p.length == 2)
.collect(
Collectors.groupingBy(
p -> p[0],
Collectors.mapping(
p -> p[1],
Collectors.toList())));
System.out.println(returnValue);
这会将值按点拆分为最多2个组,然后按照第一部分对值进行分组。
答案 1 :(得分:0)
我想使用List<String>
因为您不知道数组的长度(Map的值),如下所示:
Map<String, List<String>> map = new HashMap<>();
for (String str : result) {
String[] spl = str.split("\\.");//Split each string with dot(.)
if (!map.containsKey(spl[0])) {//If the map not contains this key (left part)
map.put(spl[0], new ArrayList<>(Arrays.asList(spl[1])));//then add a new node
} else {
map.get(spl[0]).add(spl[1]);//else add to the list the right part
}
}
<强>输出强>
{Type=[D, E, F], Name=[A, B, C]}