Trim des 0 sur une liste de int

AmdalResu Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
AmdalResu Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai une question sur la manière de faire une suppression des chiffres 0 situés au début et la fin d'une liste d'entier. Par exemple la liste : 0, 0, 0, 5, 10, 0, 15, 0, 0
Le nombre de 0 est complètement aléatoire. Il y a bien des solutions avec des boucles et des instructions if mais ce que je cherche c'est une manière élégante de le faire avec des streams par exemple. J'ai essayé mais je n'ai pas réussi car mes connaissance en streams sont limitées.
Si vous avez une solution, je suis intéressé de la connaître !

Merci par avance.
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Les stream sont là pour permettre une implémentation simple de traitements "complexes", mais il ne faut pas systématiquement faire du stream partout. Ici ton besoin est simple et le stream serait plus complexe qu'une implémentation basique avec une boucle for, donc il vaut mieux privilégier la simplicité.

Exemple :

public static <E> List<E> trim(List<E> list, E toAvoid) {
    int sz = list.size(), part2 = 0, part3 = sz, part = 1;
    for (int i = 0; i < sz; i++) {
        if (Objects.equals(list.get(i), toAvoid)) {
            if (part == 2) {
                part3 = i;
                part = 3;
            }
        } else {
            if (part == 1) {
                part2 = i;
                part = 2;
            } else if (part == 3) {
                part3 = sz;
                part = 2;
            }
        }
    }
    return list.subList(part2, part3);
}

System.out.println(trim(Arrays.asList(0, 0, 0, 5, 10, 0, 15, 0, 0), 0)); // [5, 10, 0, 15]
0
AmdalResu Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta réponse.
0