如何使用.dot分割的字符串ArrayList中的一个键和多个值填充hashmap?

时间:2017-10-24 13:28:44

标签: java string arraylist hashmap

我有一个字符串数组列表,例如:

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());
            }
        }

2 个答案:

答案 0 :(得分:1)

使用Java 8流

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]}