3
votes

Clause forEach pour parcourir les index d'un vecteur

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?


0 commentaires

3 Réponses :


6
votes

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]);
}


0 commentaires

2
votes

Vous n'avez pas besoin des index, vous pouvez simplement parcourir les valeurs, comme ceci:

vector.forEach(el -> values.add(((String[]) el)[1]));


0 commentaires

3
votes

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


1 commentaires

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.