类型不匹配:无法转换为Map <object,map <object,list <actorcontents>&gt;&gt;映射<actor,map <string,list <actorcontents =“”>&gt;&gt;

时间:2017-07-14 02:15:14

标签: java lambda java-stream

我正在尝试从列表中创建嵌套映射。使用下面的代码片段,我得到编译时错误

  

类型不匹配:无法转换   Map<Object,Map<Object,List<ActorContents>>>Map<Actor,Map<String,List<ActorContents>>>

 Map<Actor, List<String>> actorTypeOfContents = typeofContentforActor(genres, genreId);

            Map<Actor, Map<String, List<ActorContents>>> imageMap1=                 
                actorContents.stream()
                        .collect(Collectors.groupingBy(e -> e.getActor(), Collectors.groupingBy( p -> Utility.find(actorTypeOfContents.get(p.getActor()), i -> StringUtils.contains(p.getName(), "_" + i + "_"))
                                ))); 

使用的实用方法如下

public static <T> T find(List<T> items, Predicate<T> matchFunction) {
        for (T possibleMatch : items) {
            if (matchFunction.test(possibleMatch)) {
                return possibleMatch;
            }
        }
        return null;
    }

当我更改下面的代码时没有错误和代码执行。

List<String> actorNames =actorTypeOfContents.get(Actor.Genre1);

Map<Actor, Map<String, List<ActorContents>>> imageMap1=                 
                actorContents.stream()
                        .collect(Collectors.groupingBy(e -> e.getActor(), Collectors.groupingBy( p -> Utility.find(actorNames, i -> StringUtils.contains(p.getName(), "_" + i + "_"))
                                ))); 

您能帮忙弄清楚代码段的错误吗

Map<Actor, Map<String, List<ActorContents>>> imageMap1=                 
                actorContents.stream()
                        .collect(Collectors.groupingBy(e -> e.getActor(), Collectors.groupingBy( p -> Utility.find(actorTypeOfContents.get(p.getActor()), i -> StringUtils.contains(p.getName(), "_" + i + "_"))
                                ))); 

非常感谢您的协助

1 个答案:

答案 0 :(得分:1)

让我们只考虑内部地图Map<Object,List<ActorContents>>,因为外部地图有同样的问题。考虑一下:

Map<Object,List<ActorContents>> map = new HashMap<>();
map.put(1, Arrays.asList(new ActorContents()));
map.put("one", Arrays.asList(new ActorContents()));

现在,您拥有一张包含2个不同数据类型键的地图。您要求编译器将其转换为具有密钥特定类型的映射(Actor)。编译器不知道如何将整数或字符串转换为Actor

我故意没有引用您的代码,因为在阅读了我的解释后,您应该能够自己解决问题。您也可以阅读generics教程。