以下代碼錯誤映射
String[] values = ...
....
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < values.length; i++) {
map.put("X" + i, values[i]);
}
通過的IntelliJ轉換爲:
Map<String, Object> map = IntStream.range(0, values.length)
.collect(Collectors.toMap(
i -> "X" + i,
i -> values[i],
(a, b) -> b));
可縮短至
Map<String, Object> map = IntStream.range(0, values.length)
.collect(Collectors.toMap(
i -> "X" + i,
i -> values[i]));
的2個版本別編譯。
的IntelliJ,暗示存在與值I [i]的問題:
Incompatible types.
Required: int
Found: java.lang.Object
編譯器會抱怨:
Error:(35, 17) java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
required: java.util.function.Supplier,java.util.function.ObjIntConsumer,java.util.function.BiConsumer
found: java.util.stream.Collector>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
任何人都可以解釋,爲什麼?
什麼'值',你能否包括它的聲明?對IntelliJ的建議,似乎也不一致。只需在聲明和循環之間放置一個print map語句即可。它不會建議你*取代收藏*了。 – nullpointer
String [] values = ... – msayag
我想'Collector's不支持原語,這可能是爲什麼lambda轉換爲'Object',因爲'boxed()'修復了它。 –