tutorial streams procesamiento predicados parte funciones expresiones explicacion example ejemplos datos con anonimas java java-8 java-stream

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í