首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将集合映射扩展为一维映射新的“无法推断功能接口类型”

将集合映射扩展为一维映射新的“无法推断功能接口类型”
EN

Stack Overflow用户
提问于 2021-01-17 04:38:45
回答 2查看 60关注 0票数 1

我在一个映射中有一些值,我想将它们转换为一个更简单的映射,即键所在的位置'A' -> 1, 'E'-> 1,...'Z'-> 10。继续得到“无法推断函数接口类型”。

代码语言:javascript
运行
复制
private Map, Integer> scoresMap
        = Map.of(
        List.of('A', 'E', 'I', 'O', 'U', 'L', 'N', 'R', 'S', 'T'), 1,
        List.of('D', 'G'), 2,
        List.of('B', 'C', 'M', 'P'), 3,
        List.of('F', 'H', 'V', 'W', 'Y'), 4,
        List.of('K'), 5,
        List.of('J', 'X'), 8,
        List.of('Q', 'Z'), 10
);

我尝试了一种函数式方法:

代码语言:javascript
运行
复制
private Stream> expandMap(Map.Entry, Integer> kv){
    return kv.getKey()
            .stream()
            .collect(
                    Stream.of(),
                    (Stream> acc, char el) ->
                            Stream.concat(acc, Stream.of(Map.entry(el, kv.getValue()))),
                    (Stream> acc, Stream> el) -> Stream.concat(acc, el)
                    );

}

并尝试了forEach:

代码语言:javascript
运行
复制
private Map scores(){
    Map scores = Map.of();
    scoresMap
    .entrySet()
    .forEach(
        (Map.Entry, Integer> kv) -> 
            kv.getKey().forEach(
                    (char k) ->
                            scores.put(k, kv.getValue());
                )
        )
    
    return scores;

}

我认为这与模棱两可的类型无关,因为我尝试使用小帮助器而不是Lambdas。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-17 04:58:19

您可以使用flatMap

代码语言:javascript
运行
复制
Map simpleMap = scoresMap.entrySet()
            .stream()
            .flatMap(entry -> {
                Integer value = entry.getValue();
                return entry.getKey().stream().map(ch -> Map.entry(ch, value));
            })
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
票数 3
EN

Stack Overflow用户

发布于 2021-01-17 05:13:42

您可以直接使用Map.forEach(),您不必为类型而烦恼,Java可以自己计算它。

代码语言:javascript
运行
复制
private Map scores(){

    Map scores = new HashMap<>();

    scoresMap.forEach((key, value) -> 
            key.forEach((k) ->
                scores.put(k, value)));

    return scores;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65754471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档