将流中的参数重复应用到流畅的构建器方法
Repeated application of parameters from a stream to a fluent builder method
我正在使用 Jax-RS 编写 REST 服务客户端。对于请求,我想添加查询参数。 Jax-RS 中相应的方法是 webTarget.queryParam(name, value)
返回一个 new WebTarget 实例(因此 webtarget 是不可变的)。
此外,我有一个名称-值对流:Stream<Tuple<String,String>> queryParams
具有不同数量的元素。
现在我想将流中的参数重复应用到 queryParam()
方法,使用结果作为下一个应用程序的调用目标:
展开的调用看起来像这样:
WebTarget original = ...
WebTaragt wt1 = original.queryParam(t1.name,t1.value);
WebTaragt wt2 = wt1.queryParam(t2.name,t2.value);
...
WebTarget wtFinal = wtNminus1.queryParam(tN.name,tN.value);
有没有办法有效地将其实现为纯函数?
我还不能对 效率 发表声明,但是,您可能需要研究一下 Stream.reduce
。以下解决方案假定您至少有一个 WebTarget
可用于执行归约。此外,我这个解决方案不允许并行化(为此需要一个合适的组合器,我不知道 WebTarget
s 需要如何组合)。
Stream<Tuple<String, String>> queryParamStream = ...
WebTarget wtFinal = queryParamStream.reduce(original,
(webtarget, tuple) -> webtarget.queryParam(tuple.name, tuple.value),
(webtarget1, webtarget2) -> /* what would be needed to combine those when you use a parallel stream? */ webtarget2);
我正在使用 Jax-RS 编写 REST 服务客户端。对于请求,我想添加查询参数。 Jax-RS 中相应的方法是 webTarget.queryParam(name, value)
返回一个 new WebTarget 实例(因此 webtarget 是不可变的)。
此外,我有一个名称-值对流:Stream<Tuple<String,String>> queryParams
具有不同数量的元素。
现在我想将流中的参数重复应用到 queryParam()
方法,使用结果作为下一个应用程序的调用目标:
展开的调用看起来像这样:
WebTarget original = ...
WebTaragt wt1 = original.queryParam(t1.name,t1.value);
WebTaragt wt2 = wt1.queryParam(t2.name,t2.value);
...
WebTarget wtFinal = wtNminus1.queryParam(tN.name,tN.value);
有没有办法有效地将其实现为纯函数?
我还不能对 效率 发表声明,但是,您可能需要研究一下 Stream.reduce
。以下解决方案假定您至少有一个 WebTarget
可用于执行归约。此外,我这个解决方案不允许并行化(为此需要一个合适的组合器,我不知道 WebTarget
s 需要如何组合)。
Stream<Tuple<String, String>> queryParamStream = ...
WebTarget wtFinal = queryParamStream.reduce(original,
(webtarget, tuple) -> webtarget.queryParam(tuple.name, tuple.value),
(webtarget1, webtarget2) -> /* what would be needed to combine those when you use a parallel stream? */ webtarget2);