Как я могу украсить приведенный ниже запрос java, используя фильтр и предикат потока java? - PullRequest
0 голосов
/ 27 мая 2020

Как я могу украсить приведенный ниже запрос java, используя java фильтр потока и предикат?

У меня есть этот фрагмент кода, в котором он пытается выбросить некоторые исключения на основе некоторого условия, которое необходимо обработать на уровне пользовательского интерфейса. Как я могу сократить приведенный ниже код до более точного, используя фильтр потока и предикат java.

public Sort resolveArgument() {

    Sort sort = sortHandlerMethodArgumentResolver.resolveArgument();

    List<Sort.Order> orders = sort.stream().collect(Collectors.toList());
    if (orders.isEmpty()) {
        sort = Sort.by(Sort.Direction.DESC, default_sort_param);
    } else {
        if (orders.size() > sort_max_count) {
            throw new InvalidSortException("Please provide only 3 valid sort parameters.");
        }
    }

    orders.forEach(order -> {
        if (!allowed_sort_params.contains(order.getProperty())) {
            throw new InvalidSortException(order.getProperty() + " is not a valid sort parameter");
        }
    });

    return sort;
}

1 Ответ

0 голосов
/ 27 мая 2020

Вызов forEach можно заменить на:

orders.stream().map(Sort.Order::getProperty).filter(x -> !allowed_sort_params.contains(x))
    .findFirst().ifPresent(x -> {
        throw new InvalidSortException(x + " is not a valid sort parameter");
    });

Однако, ИМО, это не очень хорошее улучшение.

...