gpt4 book ai didi

java - Eclipse Collections 通过自定义类似比较器的函数对 IntList 进行排序,无需装箱

转载 作者:行者123 更新时间:2023-12-04 02:57:05 25 4
gpt4 key购买 nike

我正在尝试对一些 ( Mutable ) IntList 进行排序对象。装箱/拆箱整数的成本与我的程序相关(这正是我使用原始集合的原因)。我想按以下标准排序:

  • 所有负数都在非负数之前
  • 首先是最小(最接近零)的数字

[1, 7, 0, -9, -3] -> [-3, -9, 0, 1, 7]

Eclipse Collections 库中的 IntList 类是否有允许自定义比较器的排序方法?到目前为止我还没有找到它,但是定义的符号列表很大,搜索框只匹配精确的字符串并且几乎不存在文档(我相信大部分是从方法签名自动生成的)。

我最后的办法是编写自己的 int-int 比较器和排序函数,这没什么大不了的,但我宁愿不这样做。

请不要浪费您的时间来编写概念验证排序器,我将不胜感激。我知道如何对列表进行排序,但我只是不知道如何在 Eclipse Collections 文档中找到内容.如果您可以提供帮助,请随时将其包含在您的回答中。

最佳答案

从 10.3 版开始,Eclipse Collections 引入了对原始集合的间接排序支持。它在可变原始集合上受支持。您可以在此处查看更多详细信息和用法示例 https://medium.com/javarevisited/eclipse-collections-now-supports-indirect-sorting-of-primitive-lists-e2447ca5dbc3

OP 示例如下所示:

@Test
public void soTest()
{
// [1, 7, 0, -9, -3] -> [-3, -9, 0, 1, 7]
MutableIntList list = IntLists.mutable.of(1, 7, 0, -9, -3);

list.sortThis((a, b) -> {
// negative before non-negative
// otherwise, smallest numbers first
if (a == b) { return 0; }
if (a < 0 && b < 0) {
return (a < b) ? 1 : -1;
}
return (a < b) ? -1 : 1;}
);

Assert.assertEquals(IntLists.immutable.of(-3, -9, 0, 1, 7), list);
}

比较器 lambda 可以简化为:

list.sortThis((a, b) ->
(a < 0 && b < 0) ? Integer.compare(b, a) : Integer.compare(a, b));

关于java - Eclipse Collections 通过自定义类似比较器的函数对 IntList 进行排序,无需装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com