当前位置: 首页 > 知识库问答 >
问题:

使用Java Stream API用声明式方法重写循环命令式

杜浩壤
2023-03-14

我有namvevaluepair格式的http查询参数列表和webtarget(javax/ws/rs/client/webtarget.java)。然后,我使用命令式方法将这些查询参数逐一附加到WebTarget


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

    for (NameValuePair param : queryParams) {
      webTarget = webTarget.queryParam(param.getName(), param.getValue());
    }
    return webTarget;
  }
queryParams.stream().reduce(webTarget,((webTarget1, pair) -> webTarget1.queryParam(pair.getName(),pair.getValue())))

共有1个答案

戚建白
2023-03-14

您可以尝试这样的方法:

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

为什么需要第三个参数,您可以在这里找到

 类似资料:
  • 我试图将我的编程风格从命令式切换到声明式,但有一些概念困扰着我,比如当涉及到循环时的性能。例如,我有一个原始数据,在操作它之后,我希望得到3个预期结果:itemsHash、namesHash、rangeItemsHash 为了达到预期的结果,命令式只循环一次,而声明式至少循环3次(、、)。哪一个比较好?在性能上有什么权衡吗?

  • 我有这段代码: 我只想用Java流API和collect(Collectors.toMap())以功能性的方式重写它,但我对null的情况有点困惑。 我正在使用Java 11。

  • 在gdb中,你不用必须输入完整的命令,只需命令的(前)几个字母即可。规则是,只要这个缩写不会和其它命令有歧义(注,是否有歧义,这个规则从文档上看不出,看起来需要查看gdb的源代码,或者在实际使用中进行总结)。也可以使用tab键进行命令补全。 其中许多常用命令只使用第一个字母就可以,比如: b -> break c -> continue d -> delete f -> frame i -> in

  • 问题内容: 我是SQLAlchemy新手。 假设我在声明模式下有一个用户表: 当我知道没有将对象加载到会话中的用户ID时,我会像这样更新该用户: 我不喜欢使用,我应该不再为此担心吗? 有一个更好的方法吗? 谢谢! 问题答案: 在ORM级别上也有一些更新功能。它还不能处理任何棘手的情况,但是对于单行更新(或批量更新)的普通情况,它可以正常工作。它甚至会遍历所有已加载的对象,并将更新应用于它们。您可以

  • 我试图在声明性和命令式配置的混合中设置(J)缓存,因为JCache标准没有提供限制缓存可以占用的最大大小的方法。我想尽可能地“独立于提供者”,这样我将来就可以灵活地更改提供者。目前我有使用Java7的限制,所以我相信咖啡因被丢弃了。 我在应用程序中保留了缓存列表和它们条目的持续时间(TTL)。yaml,这是我用属性加载器得到的。然后,我用以下代码创建缓存: 无论我在POM中使用哪个JCache提供

  • 问题内容: 在Java中,我们不能与另一个具有相同名称的变量在同一作用域中声明一个变量: 语法错误,无法编译。但是,如果我们将其放入循环中: 不产生错误,效果很好。我们基本上是在声明相同的变量。是什么原因?在此背后我不知道/不了解的逻辑是什么? 问题答案: 考虑一下这种方式,在每个循环之后,作用域被“破坏”,变量消失了。在下一个循环中,将创建一个新的作用域,并且可以在该作用域中再次声明该变量。 由