Закрытие неизменяемой переменной и накопление значений за несколько итераций в виде лямбда-выражения - Java 8

Клиент WebTarget в Джерси реализован как неизменный объект, и любые операции по изменению состояния возвращают новый объект WebTarget. Чтобы добавить параметры запроса к нему, который приходит какMap<> следующий код был написан.

public WebTarget webTarget(String path, Map<String, String> queryMap) {

    WebTarget webTarget = client.target(this.address.getUrl()).path(path);
    if (queryMap != null)
        queryMap.entrySet().forEach(e -> webTarget.queryParam(e.getKey(), e.getValue()));
    return webTarget;
 }

Проблемы здесь каждый звонок.queryParam() возвращает новый WebTarget, и я застрял в том, как накапливаться, поскольку переменные, используемые внутри лямбда-выражения, должны быть либо окончательными, либо неявно окончательными, без каких-либо переназначений.

РЕДАКТИРОВАТЬ: Уменьшение может не быть вариантом в этом случае, так как в WebTarget отсутствует механизм сокращения, поэтому я не могу получить queryParam из одной веб-цели и установить ее в другой. если бы у WebTarget api была лучшая поддержка накопления, его можно было бы использовать.

ИспользуемыйJool попытаться использовать foldLeft, которого нет в нативном Java 8 API, но все же он достиг дна, так как WebTarget api не хватало его поддержки.

EDIT2: foldLeft - это способ, как предложено в ответе ниже, написал небольшойблог на этом

Ответы на вопрос(2)

Ваш ответ на вопрос