streams - predicados java 8
Java8 Stream: recopila elementos después de que se cumple una condición (4)
En Java 8 necesitas un filtro con estado.
public static <T> Predicate<T> from(Predicate<T> test) {
boolean[] found = { false };
// once found, always true
return t -> found[0] || (found[0] = test.test(t));
}
NOTA: esto solo tiene sentido para transmisiones de un solo hilo.
List<EventUser> filteredByOffSet =
eventUsers.stream()
.filter(from(e -> "id301".equals(e.getId()))
.collect(Collectors.toList());
Mi POJO es como sigue
class EventUser {
private id;
private userId;
private eventId;
}
Recupero el objeto EventUser de la siguiente manera:
List<EventUser> eventUsers = eventUserRepository.findByUserId(userId);
Diga que los ''usuarios de eventos'' son los siguientes:
[
{"id":"id200","userId":"001","eventId":"1010"},
{"id":"id101","userId":"001","eventId":"4212"},
{"id":"id402","userId":"001","eventId":"1221"},
{"id":"id301","userId":"001","eventId":"2423"},
{"id":"id701","userId":"001","eventId":"5423"},
{"id":"id601","userId":"001","eventId":"7423"}
]
Utilizando la transmisión y sin usar ninguna variable intermedia, ¿cómo puedo filtrar y recopilar eventos después de un EventUser.id dado ?: ex:
List<EventUser> filteredByOffSet = eventUsers.stream.SOMEFILTER_AND_COLLECT("id301");
el resultado debe ser:
[{"id":"id301","userId":"001","eventId":"2423"},
{"id":"id701","userId":"001","eventId":"5423"},
{"id":"id601","userId":"001","eventId":"7423"}]
Encuentra el índice del elemento de búsqueda primero:
int asInt = IntStream.range(0, list.size())
.filter(userInd-> list.get(userInd).equals(<criteria>))
.findFirst()
.getAsInt();
Obtener artículos en y después del índice:
list.stream().skip(asInt).collect(Collectors.toList());
No puedes hacer eso sin usar ninguna variable intermedia. encontrar la posición y iterarla hasta el final (vea esta pregunta a continuación que la responda con mayor precisión) ingrese la descripción del enlace aquí
Utilice " dropWhile " de Java 9.