Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Consulta sobre Filter en Stream

No filtra Ruby

Cuando hago el filter dentro de Stream y genero una nueva lista por que no me filtra Ruby.

package pe.com.alura;

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;

public class Clase5 {

public static void main(String[] args) {

    Curso curso1 = new Curso("Python", 70);
    Curso curso2 = new Curso("Ruby", 10);
    Curso curso3 = new Curso("PHP", 30);
    Curso curso4 = new Curso("JavaScript", 40);
    Curso curso5 = new Curso("Java", 200);

    ArrayList<Curso> cursos = new ArrayList<>();
    cursos.add(curso1);
    cursos.add(curso2);
    cursos.add(curso3);
    cursos.add(curso4);
    cursos.add(curso5);

    System.out.println(cursos);
    System.out.println();

    System.out.println("Metodo Comparable");
    Collections.sort(cursos);
    System.out.println(cursos);
    System.out.println();

    System.out.println("Metodo Comparable Inverso");
    Collections.sort(cursos, Collections.reverseOrder());
    System.out.println(cursos);
    System.out.println();

    System.out.println("Metodo Comparable Usando Lampira");
    List<Curso> cursoList1 = cursos.stream().sorted(Comparator.comparingInt(Curso :: getTiempo)).collect(Collectors.toList());
    System.out.println(cursoList1);
    System.out.println();

    System.out.println("Metodo Comparable Usando Lampira Quitar Ruby");
    List<Curso> cursoList2 = cursos.stream().filter(curso -> !curso.getNombre().equalsIgnoreCase("Ryby")).sorted(Comparator.comparingInt(Curso :: getTiempo)).collect(Collectors.toList());
    System.out.println(cursoList2);
    System.out.println();

}

}

2 respuestas
solución!

¡Hola Steve!

En tu código, el problema es que estás escribiendo "Ryby" en lugar de "Ruby" en el método filter. Por lo tanto, el filtro no está funcionando correctamente y no está eliminando el curso de Ruby de la lista.

Para solucionar el problema, simplemente cambia "Ryby" por "Ruby" en la línea de código donde usas el método filter:

List<Curso> cursoList2 = cursos.stream().filter(curso -> !curso.getNombre().equalsIgnoreCase("Ruby")).sorted(Comparator.comparingInt(Curso :: getTiempo)).collect(Collectors.toList());

Con este cambio, el filtro debería funcionar correctamente y eliminar el curso de Ruby de la lista.

¡Espero haber ayudado y buenos estudios!

Muchas gracias ayer me di cuenta de mi error. Agradezco desde tu tempo y respuesta.