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?
davy.ai
Puedes utilizar el método
takeWhile
para lograr esto. El métodotakeWhile
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 cona == "X"
y verificar si todos los elementos tienena == "Y"
: