Le code suivantErreur lors de la collecte IntStream vers la carte
String[] values = ...
....
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < values.length; i++) {
map.put("X" + i, values[i]);
}
est converti par IntelliJ à:
Map<String, Object> map = IntStream.range(0, values.length)
.collect(Collectors.toMap(
i -> "X" + i,
i -> values[i],
(a, b) -> b));
qui peut être raccourcie à
Map<String, Object> map = IntStream.range(0, values.length)
.collect(Collectors.toMap(
i -> "X" + i,
i -> values[i]));
Les 2 versions de flux n » t compiler.
IntelliJ, conseils qu'il ya un problème avec l'i des valeurs [i]:
Incompatible types.
Required: int
Found: java.lang.Object
Le compilateur se plaint:
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)
Quelqu'un peut-il expliquer pourquoi?
ce qui est des valeurs ' ', pourriez-vous inclure sa déclaration aussi. Aussi sur la suggestion d'IntelliJ, semble incohérent. Mettez simplement une instruction print 'map' entre la déclaration et la boucle. Il ne vous suggérera plus de * remplacer par collect *. – nullpointer
String [] values = ... – msayag
J'imagine que 'Collector's ne supporte pas les primitives, et c'est peut-être pourquoi les lambdas sont convertis en' Object', parce que 'boxed()' le corrige. –