Je souhaite supprimer une chaîne vide de la liste des chaînes.
Voici ce que j'ai essayé en utilisant l'API de flux:
list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
et la chaîne vide est toujours présente dans la liste. Qu'est-ce que je rate ?
filter()
keep les éléments qui correspondent au prédicat. Soyou a besoin du prédicat inverse:
list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
Cela ne modifiera pas non plus la liste d'origine. Cela créera une copie filtrée de la liste originale. Donc vous avez besoin
list = list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
Si vous souhaitez modifier la liste d'origine, vous devez utiliser
list.removeIf(item -> item.isEmpty());
ou simplement
list.removeIf(String::isEmpty);
Je soupçonne que vous ne gardez pas le résultat. Le résultat est renvoyé, la liste d'origine n'est pas modifiée car il s'agit d'un style de programmation fonctionnel.
list = list.stream().filter(item-> !item.trim().isEmpty()).collect(Collectors.toList());
Peut-être que la chaîne contient des espaces blancs? Remplacez item -> item.isEmpty()
par item -> !item.trim().isEmpty()
vous collectez les éléments vides :)
vous voulez le pas vide afin d'inverser le prédicat
List<String> xxx = list.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList());
de plus, le flux ne modifie pas la liste d'origine, donc Collect(Collectrors.toList())
renvoie le résultat du prédicat :)
<dependency>
<groupId>org.Apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5-SNAPSHOT</version>
</dependency>
import org.Apache.commons.lang3.StringUtils;
//Java8 new api
strings.removeIf(StringUtils::isBlank);
//stream strings=strings.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
Peut-être que votre liste contient null. Donc, d'abord filtrer avec une vérification nulle , Puis filtrer à nouveau
list.stream().filter(item -> null != item).filter(item -> !item.isEmpty()).collect(Collectors.toList());
Si vous avez Apache commons lang lib, utilisez Apache StringUtils isNotBlank.
list.stream().filter(item -> StrinUtils.isNotBlank(item)).collect(Collectors.toList());
Vous supprimez des chaînes non vides (vérifiez votre condition de filtre). Essayer:
list.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList());
Sinon, vous devrez peut-être vérifier que vous supprimez également les blancs:
list.stream().filter(item -> !item.trim().isEmpty()).collect(Collectors.toList());
Vous ne supprimez pas les chaînes vides de la liste, vous les récupériez. Votre condition de filtre est fausse.
Essayez comme ça:
List<String> collect = list.stream().filter(item -> !item.trim().isEmpty()).collect(Collectors.toList());
vous pouvez suivre l'exemple ci-dessous, cela peut vous aider
String[] firstArray = {"test1", "", "test2", "test4", "", null};
firstArray = Arrays.stream(firstArray).filter(s -> (s != null && s.length() > 0)).toArray(String[]::new);