Filtro ArrayList

¿Cómo se puede filtrar algo de Java ArrayList como si tuviera:

  1. Cómo estás
  2. Como estas
  3. Joe
  4. Micro

Y el filtro es “Cómo” eliminará a Joe y Mike.

Probablemente la mejor manera es usar guayaba

List list = new ArrayList(); list.add("How are you"); list.add("How you doing"); list.add("Joe"); list.add("Mike"); Collection filtered = Collections2.filter(list, Predicates.containsPattern("How")); print(filtered); 

huellas dactilares

 How are you How you doing 

En caso de que quiera obtener la colección filtrada como una lista, puede usar esto (también desde Guava):

 List filteredList = Lists.newArrayList(Collections2.filter( list, Predicates.containsPattern("How"))); 

En java-8 , introdujeron el método removeIf que toma un Predicate como parámetro.

Entonces será fácil como:

 List list = new ArrayList<>(Arrays.asList("How are you", "How you doing", "Joe", "Mike")); list.removeIf(s -> !s.contains("How")); 

Itere a través de la lista y compruebe si contiene la cadena “Cómo” y, en caso afirmativo, elimine. Puede usar el siguiente código:

 // need to construct a new ArrayList otherwise remove operation will not be supported List list = new ArrayList(Arrays.asList(new String[] {"How are you?", "How you doing?","Joe", "Mike"})); System.out.println("List Before: " + list); for (Iterator 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); 

SALIDA:

 List Before: [How are you?, How you doing?, Joe, Mike] List After: [How are you?, How you doing?] 

escribe tu auto una función de filtro

  public List filter(Predicate criteria, List list) { return list.stream().filter(criteria).collect(Collectors.toList()); } 

Y luego usa

  list = new Test().filter(x -> x > 2, list); 

Esta es la versión más ordenada en Java, pero necesita JDK 1.8 para soportar el cálculo lambda

Estoy de acuerdo con una respuesta anterior de que Google Guava probablemente esté ayudando mucho aquí, en términos de legibilidad:

 final Iterables.removeIf(list, new Predicate() { @Override public boolean apply(String input) { if(input.contains("How")) { //or more complex pattern matching return true; } return false; } }); 

Tenga en cuenta que esto es básicamente un duplicado de Guava – ¿Cómo eliminar de una lista, en función de un predicado, el seguimiento de lo que se eliminó?

Como no nos dio mucha información, supongo que el idioma en el que escribe el código es C #. Antes que nada: Prefiero System.Collections.Generic.List sobre ArrayList. En segundo lugar: una forma sería recorrer cada elemento de la lista y verificar si contiene “Cómo”. Otra forma sería usar LINQ. Aquí hay un ejemplo rápido que filtra cada elemento que no contiene “Cómo”:

 var list = new List(); list.AddRange(new string[] { "How are you?", "How you doing?", "Joe", "Mike", }); foreach (string str in list.Where(s => s.Contains("How"))) { Console.WriteLine(str); } Console.ReadLine();