Как я могу преобразовать для l oop в поток и разбить его в середине? - PullRequest
2 голосов
/ 03 апреля 2020

Как мне преобразовать следующий фрагмент кода в потоковый формат, попробовать фильтр, foreach и map, но все же что-то не так.

private Status validate(final Type type, final String id) {
    for(Validator validator : validators) {
        Status status = validator.validate(type, id);

        if (status == Status.INVALID || status == Status.VALID) {
            return status;
        }
    }

    return Status.UNKNOWN;
}

1 Ответ

4 голосов
/ 03 апреля 2020

Давайте разберем это l oop вниз. Сначала вы набираете go над всеми валидаторами и вызываете validate - это операция map. Если status равно INVALID или VALID, вы возвращаете его - это операция filter с findFirst logi c. И если вы не можете его найти, вы возвращаете UNKNOWN - это операция orElse. Собираем все вместе:

private Status validate(final Type type, final String id) {
    return validators.stream()
                     .map(v -> v.validate(type, id))
                     .filter(s -> s == Status.INVALID || s == Status.VALID)
                     .findFirst()
                     .orElse(Status.UNKNOWN);
}
...