在Java中映射为函数参数

时间:2020-10-28 14:36:13

标签: java

我正在编写一个以两个映射为参数的函数
这是我的代码

    public static Map<String, ArrayList<String> > getFavouriteGenres(Map<String, ArrayList<String> > userMovies, Map<String, ArrayList<String> > movieGenres)
    {
        
        Map<String, ArrayList<String>> genreMovies = new HashMap<String, ArrayList<String>>();

        for (Map.Entry m:movieGenres.entrySet()){
            //ArrayList<String> list = m.getValue();  
            for (String mov:m.getValue()){
                ArrayList<String> l = genreMovies.containsKey(mov) ? genreMovies.get(mov):new ArrayList<String>();
                genreMovies.put(mov, l.add(m.getKey()));
            }                            
        }
    //other implementation

编译时出现以下错误

StreamingApp.java:17: error: for-each not applicable to expression type
            for (String mov:m.getValue()){
                                      ^
  required: array or java.lang.Iterable
  found:    Object
StreamingApp.java:19: error: incompatible types: Object cannot be converted to String
                genreMovies.put(mov, l.add(m.getKey()));

如何解决?

2 个答案:

答案 0 :(得分:3)

您使用Map.Entry作为原始类型。这意味着它的所有泛型及其衍生的任何内容都是空白。因此,m.getValue()返回Object而不返回ArrayList<String>

解决方案是适当添加泛型:

for (Map.Entry<String, ArrayList<String>> m : movieGenres.entrySet()) {
    List<String> list = m.getValue();
   ...
}

那是一口。幸运的是,您可以编写得更简单:

for (var m : movieGenries.entrySet()) {
    List<String> list = m.getValue();
    ...
}

答案 1 :(得分:1)

更改

elevation

TO

for (Map.Entry m:movieGenres.entrySet()){

AND

for (Map.Entry<String, ArrayList<String>> m:movieGenres.entrySet()){

TO

genreMovies.put(mov, l.add(m.getKey()));
相关问题