J'ai une méthode comme celle-ci:
public void addVector(Vector myVector) {
if (myVector == null) {
return;
}
Collection<String> values = new ArrayList<>();
for (int i = 0; i < myVector.size(); i++) {
values.add(((String[]) myVector.get(i))[1]);
}
this.addItems(values);
}
Pour la vie de moi, je ne peux pas comprendre comment créer une clause forEach à partir de cela. Est-il possible de parcourir les index [i] dans une boucle forEach?
3 Réponses :
Vous n'avez pas besoin de l'index si vous utilisez la boucle for améliorée:
List<String> values =
myVector.stream()
.map(o -> (String[]) o)[1])
.collect(Collectors.toList());
Bien sûr, il serait préférable d'utiliser un type paramétré ( Vector ) et évitez la diffusion.
Ou si vous parliez de la méthode forEach actuelle:
myVector.forEach(o -> values.add(((String[]) o)[1]));
ou, mieux encore, utilisez Stream avec collect au lieu de forEach:
for (Object obj : myVector) {
values.add(((String[]) obj)[1]);
}
Vous n'avez pas besoin des index, vous pouvez simplement parcourir les valeurs, comme ceci:
vector.forEach(el -> values.add(((String[]) el)[1]));
Ou vous pouvez simplement faire
List<String> values = myVector.stream().map(arr -> { return arr.length <= 1 ? null : arr[1];}).collect(Collectors.toList());
update
Si le vecteur contient des tableaux de chaînes, ils doivent être mappés
XXX
Cela fonctionne si OP utilisait Vector, mais que l'OP semble utiliser Vector (mais en tant que type brut). Le résultat souhaité semble être une liste contenant chaque String située à l'index 1 de chaque tableau.