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

使用Java8流的构建器模式

聂建茗
2023-03-14
WebTarget target = getClient().target(u);

for (Entry<String, String> queryParam : queryParams.entrySet()) {
    target = target.queryParam(queryParam.getKey(), queryParam.getValue());
}

共有1个答案

马才
2023-03-14

为Java 8流实现正确的foldleft并不难:

@SuppressWarnings("unchecked")
public static <T, U> U foldLeft(Stream<T> stream, 
                                U identity, BiFunction<U, ? super T, U> accumulator) {
    Object[] result = new Object[] { identity };
    stream.forEachOrdered(t -> result[0] = accumulator.apply((U) result[0], t));
    return (U) result[0];
}

或以类型安全的方式:

public static <T, U> U foldLeft(Stream<T> stream, 
                                U identity, BiFunction<U, ? super T, U> accumulator) {
    class Box {
        U value;
        Box(U value) { this.value = value; }
    }
    Box result = new Box(identity);
    stream.forEachOrdered(t -> result.value = accumulator.apply(result.value, t));
    return result.value;
}

这对于顺序流和并行流是正确的。如果您的流有一些消耗CPU的无状态中间操作,比如map,那么使用并行流甚至可以提高速度:在这种情况下,下一个元素可以由map并行处理,而当前元素由foldleft并行处理。我不同意这样的操作不适合流API,因为它可以通过已经存在的foreachordered来正确地表达。

WebTarget target = EntryStream.of(queryParams).foldLeft(getClient().target(u), 
        (t, entry) -> t.queryParam(entry.getKey(), entry.getValue()))
 类似资料:
  • 给定一个文件,我们可以使用将其转换为字符串流,例如。, 我们能否以类似的方式从标准输入构建行流?

  • 问题内容: 我使用ektorp连接到CouchDB。 构建ektorp 实例的方法是使用构建器模式: 我对Spring比较陌生。请为我提供有关如何在上下文中配置以便通过进行创建的建议。 一种方法是使用。还有其他选择吗? 问题答案: 您可以尝试实现接口: 并添加到配置以下bean定义: 然后,您可以将此bean注入另一个bean,它将作为实例进行解析。

  • 我需要在没有静态嵌套类的情况下实现Builder模式。如果我有遗传,最好的方法是什么?让我们想象一下我有下面的课。 是创建一个Builder类来负责设置PassengerCar和Truck的值更好,还是我们需要另外三个类,CarBuilder,PassengerCarBuilder extends CarBuilder和TruckBuilder extends CarBuilder?

  • 问题内容: 什么是一些 常见的 , 现实世界的例子 使用Builder模式的?它能买到什么?为什么不只使用工厂模式? 问题答案: 构建器和工厂恕我直言之间的主要区别在于,当您需要做很多事情来构建对象时,构建器非常有用。例如,想象一个DOM。您必须创建大量节点和属性才能获得最终对象。当工厂可以在一个方法调用中轻松创建整个对象时,将使用工厂。 使用构建器的一个示例是构建XML文档,例如在构建HTML片

  • 本文向大家介绍Design patterns 构建器模式/ C#/流利接口,包括了Design patterns 构建器模式/ C#/流利接口的使用技巧和注意事项,需要的朋友参考一下 示例 用法示例:            

  • 问题内容: 我有一个建设者: 在模仿器中模拟生成器将使我对每种方法都无效。因此,有没有一种简单的方法可以使生成器在每次调用函数时返回自身,而无需使用来模拟每个函数本身。 问题答案: 您可以使用RETURN_DEEP_STUBS模拟链接API。 如果您知道将调用您的构建器的确切顺序,那么以下是如何使用它的示例: 不幸的是,这不会为您提供一种模拟“所有各种生成器方法”的通用方法,以使它们始终返回此值,