如何使用java 8流将地图键转换为大写?

时间:2016-10-10 06:22:54

标签: hashmap java-8 java-stream

我有一个方法如下

private Map<String,List<String>>  createTableColumnListMap(List<Map<String,String>> nqColumnMapList){

        Map<String, List<String>> targetTableColumnListMap = 
                nqColumnMapList.stream()
                     .flatMap(m -> m.entrySet().stream())
                     .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));
        return targetTableColumnListMap;
    }

我想要大写地图键,但无法找到方法。有没有java 8方法来实现这个目标?

2 个答案:

答案 0 :(得分:4)

这不需要任何花哨的操纵收藏家。假设你有这张地图

Map<String, Integer> imap = new HashMap<>();
imap.put("One", 1);
imap.put("Two", 2);

只需获取keySet()的信息流并收集到新地图中,其中您插入的密钥是大写的:

Map<String, Integer> newMap = imap.keySet().stream()
        .collect(Collectors.toMap(key -> key.toUpperCase(), key -> imap.get(key)));

// ONE - 1
// TWO - 2

修改

@ Holger的评论是正确的,只使用一个条目集会更好(也更干净),所以这里有更新的解决方案

Map<String, Integer> newMap = imap.entrySet().stream()
            .collect(Collectors.toMap(entry -> entry.getKey().toUpperCase(), entry -> entry.getValue()));

答案 1 :(得分:2)

回答您的问题[可以复制和粘贴]:

Map<String, List<String>> targetTableColumnListMap = nqColumnMapList.stream().flatMap(m -> m.entrySet().stream())
                .collect(Collectors.groupingBy(e -> e.getKey().toUpperCase(), Collectors.mapping(Map.Entry::getValue, Collectors.toList())));