Переписать императив для L oop с декларативным подходом, используя Java Stream API - PullRequest
1 голос
/ 10 апреля 2020

У меня есть список параметров http-запроса в формате NamveValuePair и WebTarget ( javax / ws / rs / client / WebTarget. java). Затем я просто присоединяю эти параметры запроса к WebTarget один за другим, используя обязательный подход.

Я знаю, что легко применить поток, когда все элементы относятся к типу данных. Но я не смог применить то же решение, когда их нет.

Это код, который я хочу переписать, используя Java Streams API


 public WebTarget attachQueryParams(List<NameValuePair> queryParams, WebTarget webTarget) {

    for (NameValuePair param : queryParams) {
      webTarget = webTarget.queryParam(param.getName(), param.getValue());
    }
    return webTarget;
  }

Я пытался переписать его, используя функцию stream reduce, безуспешно:

queryParams.stream().reduce(webTarget,((webTarget1, pair) -> webTarget1.queryParam(pair.getName(),pair.getValue())))

1 Ответ

3 голосов
/ 10 апреля 2020

Вы можете попробовать что-то вроде этого:

queryParams.stream()
        .reduce(webTarget,
                (webTarget1, pair) -> webTarget1.queryParam(pair.getName(),pair.getValue()),
                (v1, v2) -> v1);

Зачем вам нужен третий параметр, вы можете узнать здесь

...