J'essaie de créer un Map
d'un List
en utilisant Stream
s.
En key
doit être le nom de l'élément original,
En value
devrait contenir des données dérivées.
Après .map()
le flux se compose de Integer
et à l'époque de la .collect()
Je ne peux pas accéder à "foo" à partir de la page précédente. lambda
. Comment obtenir l'article original en .toMap()
?
Peut-on le faire avec Stream
ou ai-je besoin de .forEach()
?
(Le code ci-dessous n'est qu'une démonstration, le code réel est bien sûr beaucoup plus complexe et je ne peux pas faire de doSomething()
une méthode de Foo
).
import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class StreamTest {
public class Foo {
public String getName() {
return "FOO";
}
public Integer getValue() {
return 42;
}
}
public Integer doSomething(Foo foo) {
return foo.getValue() + 23;
}
public Map<String, Integer> run() {
return new ArrayList<Foo>().stream().map(foo -> doSomething(foo)).collect(Collectors.toMap(foo.getName, Function.identity()));
}
public static void main(String[] args) {
StreamTest streamTest = new StreamTest();
streamTest.run();
}
}