其他的React式库,比如project reactor,为发布者提供了排序方法,但是在mutiny中没有这样的方法,他们的文档甚至没有提到它。
https://smallrye.io/smallrye-mutiny
现在我通过这样做来实现上述功能
multi.collectItems()
.asList()
.map(
list -> {
list.sort();
return list;
})
.convert()
.with(listUni -> Multi.createFrom().iterable(listUni.await().indefinitely()))
有没有更好的方法来做同样的事情?
3条答案
按热度按时间anhgbhbe1#
我不相信有一个内置的/更好的方法来做到这一点。
Mutiny通常以在其核心中拥有一组“精简”的操作符为荣,并允许您根据需要构建其他更复杂的操作符。他们试图避免React堆的情况,即您在几个核心类型上有100多个方法,并且没有大量的背景知识通常很难知道哪些是相关的。
恕我直言,这不是坏事。其他的响应式框架肯定有这些内置的
sort()
操作符,但是这里有一个危险-人们认为他们仍然可以把它们当作无限的,神奇的排序的发布者,因为没有任何地方有任何集合的迹象。当然你不能-在内部这些框架必须维护一个底层集合来排序数据,然后在流完成时输出其内容。然而,这并不清楚,忽略这一事实通常会导致意外的减速和OutOfMemoryError
。相反,在您的示例中,很明显此流使用底层集合来排序数据。在你的例子中,我只想改变一个小东西,但与你的问题无关-我会用途:
list.stream().sorted().collect(Collectors.toList())
...而不是对可变列表进行排序。在React流中改变数据结构有点代码味道。
ffscu2ro2#
我使用的另一种方法--在
.collect().in(TREE_MAP_SUPPLIER, MULTI_MAP_ACCUMULATOR)
附带多重对象时,将它们合并到TreeMap中kmynzznz3#
1.将“多维”转换为“单向”(列表)。
1.从Uni开始对列表排序。
1.将单轴转换为多轴