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.