Über unveränderliche Variablen hinweg schließen und Werte über mehrere Iterationen hinweg als Lambda-Ausdruck akkumulieren - Java 8

WebTarget im Jersey-Client ist als unveränderliches Objekt implementiert, und alle Vorgänge zum Ändern des Status geben ein neues WebTarget zurück. Hinzufügen von Abfrageparametern, die als @ eingehMap<> Der folgende Code wurde geschrieben.

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;
 }

Die Probleme hier ist jeder Anruf an.queryParam() gibt ein neues WebTarget zurück und ich bin nicht sicher, wie ich es akkumulieren soll, da die Variablen, die in einem Lambda-Ausdruck verwendet werden, entweder final oder implizit final sein müssen, ohne Neuzuweisungen.

BEARBEITE: Reduzieren ist in diesem Fall möglicherweise keine Option, da WebTarget nicht über den Mechanismus zur Reduzierung verfügt, mit dem ich den queryParam nicht von einem Webtarget abrufen und in ein anderes setzen kann. Wenn die WebTarget-API die Akkumulation besser unterstützen würde, hätte sie verwendet werden können.

Benutzt Jool versuchen, foldLeft zu nutzen, das in der nativen Java 8-API fehlt, aber immer noch den Tiefpunkt erreicht, da die Unterstützung für die WebTarget-API fehlt.

EDIT2: foldLeft ist die Art und Weise, wie in der Antwort unten vorgeschlagen, hat ein kleines @ geschrieb blog auf diesem

Antworten auf die Frage(4)

Ihre Antwort auf die Frage