当前位置: 首页 > 面试题库 >

将消费者转化为职能

卢枫涟
2023-03-14
问题内容

Function接口的许多lambda都采用以下形式

t -> {
    // do something to t
    return t;
}

我经常这样做,以至于我为此写了一个方法。

static <T> Function<T, T> consumeThenReturn(Consumer<T> consumer) {
    return t -> {
        consumer.accept(t);
        return t;
    };
}

这使我可以做一些非常好的事情,例如:

IntStream.rangeClosed('A', 'Z')
         .mapToObj(a -> (char) a)
         .collect(Collectors.collectingAndThen(Collectors.toList(), consumeThenReturn(Collections::shuffle)))
         .forEach(System.out::print);

是否有另一种方法可以在不依赖我自己的方法的情况下进行这样的转换?我错过了新API中的任何东西,这些东西使我的方法变得多余了吗?


问题答案:

有许多潜在的有用的方法,可以被添加到FunctionConsumerSupplierhtml" target="_blank">接口。您提供了一个很好的示例(将a转换ConsumerFunction),但是可以添加许多其他潜在的转换或实用程序。例如,使用Functionas
Consumer(忽略返回值)或as Supplier(提供输入值)。或通过提供任一值将a转换BiFunction为a
Function。当然,所有这些都可以用代码手动完成,或者通过实用程序功能提供,如您所显示的那样,但是与许多其他语言一样,在API中使用标准化的机制可能会很有价值。

这只是我的猜测,但我想这可能反映了语言设计师希望将API保持尽可能干净的愿望。但是,我对Comparator这种语言提供的非常丰富的实用程序(例如,反向订单,按多个条件进行比较,处理空值等)的对比感到很感兴趣(这些示例)。这些也很容易留给用户,但是由API提供。我很想听听一位语言设计师的意见,为什么这些界面的方法看起来如此不一致。



 类似资料:
  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 我花了几个小时想弄清楚发生了什么,但没能找到解决办法。 这是我在一台机器上的设置: 1名zookeeper跑步 我正在使用kafka控制台生成器插入消息。如果我检查复制偏移量(

  • Flink kafka消费者有两种类型的消费者,例如: 这两个消费者层次结构扩展了相同的类。我想知道维护编号类背后的设计决策是什么?我们什么时候应该使用其中一种? 我注意到带有数字后缀的类有更多的特性(例如ratelimiting)。 https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kafka

  • 我刚接触Kafka,很少阅读教程。我无法理解使用者和分区之间的关系。 请回答我下面的问题。 > 消费者是否由ZK分配到单个分区,如果是,如果生产者将消息发送到不同的分区,那么其他分区的消费者将如何使用该消息? 我有一个主题,它有3个分区。我发布消息,它会转到P0。我有5个消费者(不同的消费者群体)。所有消费者都会阅读P0的信息吗?若我增加了许多消费者,他们会从相同的P0中阅读信息吗?如果所有消费者

  • 我正在Java中实现一个简单的Kafka消费者。代码如下: 我在网上查看的任何文档都给出了range或roundrobin作为可能的分配策略,据我所知,groupId是一个自定义名称。不确定这里什么是正确的配置值。