Java 8: How to convert List to Map>?

前端 未结 5 1623
隐瞒了意图╮
隐瞒了意图╮ 2021-01-01 17:25

I have a List of String like:

List locations = Arrays.asList(\"US:5423\",\"US:6321\",\"CA:1326\",\"AU:5631\");

And I want to

5条回答
  •  庸人自扰
    2021-01-01 17:52

    You may do it like so:

    Map> locationMap = locations.stream()
            .map(s -> s.split(":"))
            .collect(Collectors.groupingBy(a -> a[0],
                    Collectors.mapping(a -> a[1], Collectors.toList())));
    

    A much more better approach would be,

    private static final Pattern DELIMITER = Pattern.compile(":");
    
    Map> locationMap = locations.stream()
        .map(s -> DELIMITER.splitAsStream(s).toArray(String[]::new))
            .collect(Collectors.groupingBy(a -> a[0], 
                Collectors.mapping(a -> a[1], Collectors.toList())));
    

    Update

    As per the following comment, this can be further simplified to,

    Map> locationMap = locations.stream().map(DELIMITER::split)
        .collect(Collectors.groupingBy(a -> a[0], 
            Collectors.mapping(a -> a[1], Collectors.toList())));
    

提交回复
热议问题