Lista de filtros en Java

Sheeraz Gul 12 octubre 2023
  1. Filtrar una lista usando Java 7 y superior
  2. Filtrar una lista usando Java 8
  3. Filtrar una lista usando Google Guava
  4. Filtrar una lista usando Apache Commons
Lista de filtros en Java

Con frecuencia se requiere filtrar una lista mientras se trabaja en Java. Varios métodos para filtrar una lista en Java usan el núcleo de Java y diferentes bibliotecas.

Este tutorial demuestra cómo filtrar una lista en Java.

Filtrar una lista usando Java 7 y superior

Podemos recorrer la lista usando Java 7 y las versiones anteriores para filtrar una lista en Java.

Usa el bucle for

Un método es utilizar el bucle for y la sentencia condicional. Veamos el ejemplo:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List = Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey");

    // Using Java 7 and before:

    // empty list
    List<String> Filtered_List = new ArrayList<>();

    // iterate through the list
    for (String Demo_Entry : Demo_List) {
      // filter values that start with `B`
      if (Demo_Entry.startsWith("J")) {
        Filtered_List.add(Demo_Entry);
      }
    }

    System.out.println(Filtered_List);
  }
}

El código anterior usa for y if para filtrar los nombres de la lista dada con la letra J. Ver salida:

[Jack, Jhon, Joey]

Utilice el método remove()

Otro método es utilizar el método remove() de la clase Iterator para filtrar la lista. Veamos el ejemplo:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    // Using Java 7 and before:

    // get an iterator to the list
    Iterator<String> Demo_Iterator = Demo_List.iterator();

    // iterate through the list
    while (Demo_Iterator.hasNext()) {
      String Demo = Demo_Iterator.next();

      // filter values that start with `B`
      if (!Demo.startsWith("J")) {
        Demo_Iterator.remove();
      }
    }

    System.out.println(Demo_List);
  }
}

El código usa Iterator con el método remove() y el bucle while para filtrar los nombres con la letra J de la lista dada. Ver salida:

[Jack, Jhon, Joey]

Filtrar una lista usando Java 8

Para filtrar una lista en Java 8, podemos usar el enfoque en el que convertimos la lista en una secuencia y luego la filtramos. Este es el método recomendado para filtrar una lista en Java 8.

Ver el ejemplo:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    // Using Java 8 and above:
    String Filtered_List = Demo_List.stream()
                               .filter(entry -> entry.startsWith("J"))
                               .collect(Collectors.joining(", ", "[", "]"));

    System.out.println(Filtered_List);
  }
}

El código anterior usa el stream() para filtrar la lista con los nombres con la letra J. Ver salida:

[Jack, Jhon, Joey]

Como podemos ver, el código anterior convierte la lista en una cadena en la salida. También podemos convertir la salida a una Lista usando el Stream.

Ver el ejemplo:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    // Using Java 8 and above:
    List<String> Filtered_List =
        Demo_List.stream().filter(entry -> entry.startsWith("J")).collect(Collectors.toList());

    System.out.println(Filtered_List);
  }
}

El código anterior convertirá la salida de la lista filtrada en una lista. Ver salida:

[Jack, Jhon, Joey]

Filtrar una lista usando Google Guava

La biblioteca Guava contiene Iterable y FluentIterable que se pueden usar para filtrar una lista en Java. La clase Iterable incluye el método filter(), que filtra las listas.

La biblioteca Guava se puede usar agregando la siguiente dependencia a su proyecto Maven:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>19.0</version>
</dependency>

Ahora probemos un ejemplo usando el Iterable de la biblioteca de Google Guava:

package delftstack;

import com.google.common.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    Iterable<String> Filtered_Iterable =
        Iterables.filter(Demo_List, new com.google.common.base.Predicate<String>() {
          @Override
          public boolean apply(String s) {
            return s.startsWith("J");
          }
        });

    List<String> Filtered_List = Lists.newArrayList(Filtered_Iterable);

    System.out.println(Filtered_List);
  }
}

El código filtrará la lista dada con nombres que comiencen con la letra J. Ver salida:

[Jack, Jhon, Joey]

Probemos un ejemplo con FluentIterable:

package delftstack;

import com.google.common.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    List<String> Filtered_List = FluentIterable.from(Demo_List)
                                     .filter(new com.google.common.base.Predicate<String>() {
                                       @Override
                                       public boolean apply(String s) {
                                         return s.startsWith("J");
                                       }
                                     })
                                     .toList();

    System.out.println(Filtered_List);
  }
}

El código anterior utiliza el FluentIterable de la biblioteca de Google Guava para filtrar los nombres de la lista, que comienza con la letra J. Ver salida:

[Jack, Jhon, Joey]

Filtrar una lista usando Apache Commons

Apache Commons proporciona la clase CollectionUtils, que se puede utilizar para filtrar una lista. Para usar Apache Commons, agregue la siguiente dependencia a su proyecto Maven:

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

Ahora probemos un ejemplo para filtrar una lista usando CollectionUtils:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    List<String> Filtered_List = new ArrayList<>(Demo_List);
    CollectionUtils.filter(Filtered_List, new Predicate<String>() {
      @Override
      public boolean evaluate(String s) {
        return s.startsWith("J");
      }
    });

    System.out.println(Filtered_List);
  }
}

El código anterior usa el método CollectionUtils para filtrar la lista con los nombres que comienzan con la letra J. Ver salida:

[Jack, Jhon, Joey]
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java List