java - 类型不匹配 : cannot convert from Map<Object, Map<Object,List<ActorContents>>> 到 Map<Actor ,Map<String,List<ActorContents>>>

标签 java lambda java-stream

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

Type mismatch: cannot convert from Map<Object,Map<Object,List<ActorContents>>> to 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 + "_"))
                                ))); 

非常感谢您的帮助

最佳答案

让我们考虑一下内部 map 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 对您也有好处。教程。

关于java - 类型不匹配 : cannot convert from Map<Object, Map<Object,List<ActorContents>>> 到 Map<Actor ,Map<String,List<ActorContents>>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093556/

相关文章:

java - Google App Engine - 始终在实例上自动缩放?

.net - IsDebugEnabled 与 Debug(Action<FormatMessageHandler>)

c++ - Qt5、lambda 和变量的范围

java - 枚举的通用过滤器

java - Lambda 和流(数组)

java - Collectors.groupingBy 用于可选字段的内部字段

Java Instant Messenger - 联系人列表

java - 如何让服务器在连接时向客户端发送消息?

java - 如果第一个为真,则不要运行第二个

java - 如何为抽象类编写 lambda 表达式