我正在编写一个以两个映射为参数的函数
这是我的代码
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()));
如何解决?
答案 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()));