Comment pouvez-vous filtrer quelque chose d'un Java ArrayList comme si vous aviez:
Et le filtre est "Comment" il va supprimer Joe et Mike.
Le meilleur moyen est probablement d'utiliser Guava
List<String> list = new ArrayList<String>();
list.add("How are you");
list.add("How you doing");
list.add("Joe");
list.add("Mike");
Collection<String> filtered = Collections2.filter(list,
Predicates.containsPattern("How"));
print(filtered);
empreintes
How are you
How you doing
Si vous souhaitez obtenir la collection filtrée sous forme de liste, vous pouvez utiliser ceci (également depuis Guava):
List<String> filteredList = Lists.newArrayList(Collections2.filter(
list, Predicates.containsPattern("How")));
Parcourez la liste et vérifiez si contient votre chaîne "Comment" et si c'est le cas, supprimez-la. Vous pouvez utiliser le code suivant:
// need to construct a new ArrayList otherwise remove operation will not be supported
List<String> list = new ArrayList<String>(Arrays.asList(new String[]
{"How are you?", "How you doing?","Joe", "Mike"}));
System.out.println("List Before: " + list);
for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
}
System.out.println("List After: " + list);
OUTPUT:
List Before: [How are you?, How you doing?, Joe, Mike]
List After: [How are you?, How you doing?]
écrivez vous-même une fonction de filtrage
public List<T> filter(Predicate<T> criteria, List<T> list) {
return list.stream().filter(criteria).collect(Collectors.<T>toList());
}
Et puis utiliser
list = new Test().filter(x -> x > 2, list);
C'est la version la plus soignée de Java, mais JDK 1.8 est nécessaire pour prendre en charge le calcul lambda.
Je suis d'accord avec une réponse précédente qui Google Guava aide probablement beaucoup ici, en termes de lisibilité:
final Iterables.removeIf(list, new Predicate<String>() {
@Override
public boolean apply(String input) {
if(input.contains("How")) { //or more complex pattern matching
return true;
}
return false;
}
});
Veuillez noter qu’il s’agit en réalité d’un doublon de Goyave - Comment supprimer une liste, en se basant sur un prédicat, en gardant une trace de ce qui a été supprimé?