java 我如何排序一个多在smallrye叛变

kuhbmx9i  于 2023-03-21  发布在  Java
关注(0)|答案(3)|浏览(104)

其他的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()))

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

anhgbhbe

anhgbhbe1#

我不相信有一个内置的/更好的方法来做到这一点。
Mutiny通常以在其核心中拥有一组“精简”的操作符为荣,并允许您根据需要构建其他更复杂的操作符。他们试图避免React堆的情况,即您在几个核心类型上有100多个方法,并且没有大量的背景知识通常很难知道哪些是相关的。
恕我直言,这不是坏事。其他的响应式框架肯定有这些内置的sort()操作符,但是这里有一个危险-人们认为他们仍然可以把它们当作无限的,神奇的排序的发布者,因为没有任何地方有任何集合的迹象。当然你不能-在内部这些框架必须维护一个底层集合来排序数据,然后在流完成时输出其内容。然而,这并不清楚,忽略这一事实通常会导致意外的减速和OutOfMemoryError。相反,在您的示例中,很明显此流使用底层集合来排序数据。
在你的例子中,我只想改变一个小东西,但与你的问题无关-我会用途:
list.stream().sorted().collect(Collectors.toList())
...而不是对可变列表进行排序。在React流中改变数据结构有点代码味道。

ffscu2ro

ffscu2ro2#

我使用的另一种方法--在.collect().in(TREE_MAP_SUPPLIER, MULTI_MAP_ACCUMULATOR)附带多重对象时,将它们合并到TreeMap中

kmynzznz

kmynzznz3#

1.将“多维”转换为“单向”(列表)。
1.从Uni开始对列表排序。
1.将单轴转换为多轴

multi.collect().asList() //1
.onItem()
.transform(list -> list.stream().sorted(Comparator.comparing(item::getId)).toList()) //2
.onItem()
.transformToMulti(list -> Multi.createFrom().iterable(list)); //3

相关问题