es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtrar basándose en el valor de los elementos anteriores de la lista.

Tengo una lista de objetos que se ve así:

class Test {
    String a;
    int sortKey;
}

List<test> testList; 

Esta testList está ordenada según sortKey.

Quiero encontrar el primer objeto de Test en la testList donde el valor de a es “X” y el valor de todos los objetos de Test anteriores en la lista hasta que se encuentre este elemento sea “Y”.

Esto es lo que estoy intentando:

testList
    .stream()
    .sorted(sortBasedOnSortKey())
    .filter(test -> test.a().equals("X"))
    .findFirst();

¿Cómo puedo asegurarme de que los elementos anteriores tengan un valor de “Y” en a?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar el método takeWhile para lograr esto. El método takeWhile toma un predicado como argumento y devuelve un flujo consistente en el prefijo más largo de elementos tomados del flujo que coinciden con el predicado dado.

    Así, puedes utilizar el método takeWhile para tomar todos los elementos del flujo hasta encontrar el elemento con a == "X" y verificar si todos los elementos tienen a == "Y":

    testList
        .stream()
        .sorted(sortBasedOnSortKey())
        .takeWhile(test -> test.a().equals("Y"))
        .allMatch(test -> test.a().equals("Y"))
        .findFirst();
    

Comments are closed.