我如何对小号兵变中的多重进行分类

问题描述

其他反应式库(例如Project Reactor)为发布者提供了排序方法,但在叛变中没有这种方法。 他们的文档甚至都没有谈论它。

https://smallrye.io/smallrye-mutiny

现在,我通过执行此操作来实现上述功能

multi.collectItems()
.asList()
.map(
list -> {
  list.sort();
  return list;
})
.convert()
.with(listUni -> Multi.createFrom().iterable(listUni.await().indefinitely()))

有没有更好的方法来做同样的事情?

解决方法

我不认为有内置的/更好的方法。

Mutiny通常会因为在其核心中具有一组“缩减”的运算符,而让您根据需要构建其他更复杂的运算符,而倍受赞誉。他们正试图避免使用反应堆的情况,在这种情况下,您需要使用100种以上的几种核心类型的方法,并且由于缺乏大量的背景知识,通常很难知道哪些方法是相关的。

恕我直言,这不是坏事。其他反应式框架肯定具有这些内置的sort()运算符,但是这里存在危险-人们认为他们仍然可以将它们视为无限的,魔术般排序的发布者,因为在任何地方都没有任何集合的迹象。您当然不能-内部这些框架必须维护基础集合以对数据进行排序,然后在流完成后仅输出其内容。但是,这还不是很清楚,对这一事实的不了解往往会导致意外的速度降低和OutOfMemoryError。相反,在您的示例中,很明显,该流使用基础集合对数据进行排序。

在您的示例中,我只更改了一件小事,但与您的问题并没有真正的关联-我会使用:

list.stream().sorted().collect(Collectors.toList())

...在地图调用中,而不是对可变列表进行排序。在响应流中对数据结构进行突变会有点代码味道。

,

我使用的另一种方法 - 使用 .collect().in(TREE_MAP_SUPPLIER,MULTI_MAP_ACCUMULATOR) 时将 multis 组合到 TreeMap 中