Map.getValue() returns 某一次是List,另一次是Object
Map.getValue() returns a List a certain time, an Object another time
我有以下代码:
for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
methodThatTakesAListOfSomething(somethingByString.getValue());
}
我试着用这个来改变代码:
for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
for(Something something : somethingsByString.getValue()) {
methodThatTakesAListOfSomething(something);
}
然后编译器说我的方法不能将 Something
作为参数,它需要 List<Something>
.
为什么第一种情况是somethingsByString.getValue()
returns List<Something>
,第二种情况是Something
?
somethingsByString.getValue()
returns a List<Something>
在这两种情况下。
但是,在第二种情况下,您正在迭代 List<Something>
的元素(使用增强的 for 循环)并尝试将单个 Something
实例传递给 methodThatTakesAListOfSomething
。这不起作用,因为该方法需要 List<Something>
.
如果您想在单独的方法调用中处理每个 Something
实例,您应该将 methodThatTakesAListOfSomething
更改为采用单个 Something
实例,或者创建一个采用单个 Something
实例的新方法单身 Something
:
for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
for(Something something : somethingsByString.getValue()) {
methodThatTakesSomething(something);
}
这种行为仅仅是因为在第二种情况下,您使用了嵌套的 foreach
循环,这意味着您使用第一个 foreach
循环遍历条目,然后第二个循环遍历列表的元素。
因此给出编译错误,因为像 methodThatTakesAListOfSomething(List<Something> input)
这样声明的方法不能接受类型 Something
的输入。
这是两种完全不同的类型.
相反,如果您的方法需要类型 Something
而不是 List<Something>
来解决此问题,则声明该方法的参数为 methodThatTakesAListOfSomething(Something input)
否则,如果该方法应采用a List<Something>
然后将方法声明为 methodThatTakesAListOfSomething(List<Something> input)
。
最后但并非最不重要的是,当您需要访问 Something
时仅使用嵌套 foreach
循环,而当您想要访问 List<Something>
时使用单个 foreach
循环.
我有以下代码:
for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
methodThatTakesAListOfSomething(somethingByString.getValue());
}
我试着用这个来改变代码:
for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
for(Something something : somethingsByString.getValue()) {
methodThatTakesAListOfSomething(something);
}
然后编译器说我的方法不能将 Something
作为参数,它需要 List<Something>
.
为什么第一种情况是somethingsByString.getValue()
returns List<Something>
,第二种情况是Something
?
somethingsByString.getValue()
returns a List<Something>
在这两种情况下。
但是,在第二种情况下,您正在迭代 List<Something>
的元素(使用增强的 for 循环)并尝试将单个 Something
实例传递给 methodThatTakesAListOfSomething
。这不起作用,因为该方法需要 List<Something>
.
如果您想在单独的方法调用中处理每个 Something
实例,您应该将 methodThatTakesAListOfSomething
更改为采用单个 Something
实例,或者创建一个采用单个 Something
实例的新方法单身 Something
:
for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
for(Something something : somethingsByString.getValue()) {
methodThatTakesSomething(something);
}
这种行为仅仅是因为在第二种情况下,您使用了嵌套的 foreach
循环,这意味着您使用第一个 foreach
循环遍历条目,然后第二个循环遍历列表的元素。
因此给出编译错误,因为像 methodThatTakesAListOfSomething(List<Something> input)
这样声明的方法不能接受类型 Something
的输入。
这是两种完全不同的类型.
相反,如果您的方法需要类型 Something
而不是 List<Something>
来解决此问题,则声明该方法的参数为 methodThatTakesAListOfSomething(Something input)
否则,如果该方法应采用a List<Something>
然后将方法声明为 methodThatTakesAListOfSomething(List<Something> input)
。
最后但并非最不重要的是,当您需要访问 Something
时仅使用嵌套 foreach
循环,而当您想要访问 List<Something>
时使用单个 foreach
循环.