当用于比较对象的所选字段相等时,Java如何决定对具有多个字段的对象列表进行排序?

乔治·弗朗西斯

我有一个名为Instance的对象,具有2个字段,这些对象是表示数据集中各个列(例如年龄,性别,类别等)的一组功能(这是另一个对象);及其值(即数字)。我还实现了一个自定义比较器,可以根据实例的特定功能对这些对象的列表进行排序,如下所示:

Comparator<Instance> comparator = Comparator.comparing(c -> c.get(feature));
Instance[] sorted = instList.stream().sorted(comparator).toArray(Instance[]::new);

现在,此代码可以正常工作,但是,在许多情况下,我要排序的功能与另一个实例具有相同的值。在这种情况下,Java如何确定如何继续对列表进行排序?

约翰·库格曼

从Java API引用以下内容Stream.sorted()

对于有序流,排序是稳定的。对于无序流,不保证稳定性。

上的流List有序的,这意味着使用了稳定的排序算法。稳定的排序可确保不会交换相等的元素。比较相等的元素将以与起始列表相同的相对顺序保留。

标准库中的所有排序方法都具有类似的保证:

  • Collections.sort()

  • Arrays.sort()

  • Arrays.parallelSort()

    保证这种排序是稳定的:相等的元素不会由于排序而重新排序。

    ...

    此类中包含的方法的文档包括对实现的简要说明此类描述应被视为实现说明,而不是规范的一部分只要遵守规范本身,实现者就可以随意替换其他算法。(例如,所使用的算法sort(Object[])不必是MergeSort,但必​​须是稳定的。)

  • List.sort()

    实施注意:
    此实施是一个稳定的,自适应的,迭代的合并排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何对具有两个字段的对象进行排序?

来自分类Dev

如何在Java中按多个字段排序对象?

来自分类Dev

使用Java中的可比较按两个字段升序和降序对对象列表进行排序

来自分类Dev

与多个字段进行比较时提供严格的排序

来自分类Dev

在C#中,如何按对象的多个字段对对象集合进行排序?

来自分类Dev

带有可选字段的Java对象

来自分类Dev

如何根据Scala中的对象字段对列表对象进行排序?

来自分类Dev

如何通过弹性搜索中的特定值查找具有多个字段的内部对象的对象

来自分类Dev

按多个字段对列表进行排序

来自分类Dev

根据要求创建具有多个字段的对象?

来自分类Dev

如何使用对象列表过滤多个字段

来自分类Dev

如何通过多个字段在客户端对Java对象排序?

来自分类Dev

如何对包含单词和数字的字段的对象列表进行排序?

来自分类Dev

如何根据重复字段对对象列表进行排序?

来自分类Dev

如何在nHibernate中部分投影具有多个字段的子对象

来自分类Dev

Angular-7-如何从具有多个字段的Response中创建对象?

来自分类Dev

如何在 Django 中过滤具有多个字段对象的查询集?

来自分类Dev

如何具有基于特定字段的排序对象集?

来自分类Dev

如何在没有比较器/可比较器的情况下按字段对对象的ArrayList进行排序

来自分类Dev

如何在字段上使用RuleBasedCollator对Java对象列表进行排序?

来自分类Dev

如何在Java中比较对象并对列表进行排序

来自分类Dev

Linq用于将数据过滤到具有多个字段的对象中,其中之一是List <string>

来自分类Dev

如何按对象的子对象字段对对象进行排序?

来自分类Dev

如何使用比较器对集合中的多个字段进行排序?

来自分类Dev

无法对JavaScript(AngularJS)中多个字段上的对象进行排序

来自分类Dev

使用Scala sortWith函数对对象中的多个字段进行排序

来自分类Dev

Java - 从对象获取具有公共超类的字段列表

来自分类Dev

比较Java中的两个对象..每个对象都有两个字段

来自分类Dev

对具有多个值的对象进行排序

Related 相关文章

  1. 1

    如何对具有两个字段的对象进行排序?

  2. 2

    如何在Java中按多个字段排序对象?

  3. 3

    使用Java中的可比较按两个字段升序和降序对对象列表进行排序

  4. 4

    与多个字段进行比较时提供严格的排序

  5. 5

    在C#中,如何按对象的多个字段对对象集合进行排序?

  6. 6

    带有可选字段的Java对象

  7. 7

    如何根据Scala中的对象字段对列表对象进行排序?

  8. 8

    如何通过弹性搜索中的特定值查找具有多个字段的内部对象的对象

  9. 9

    按多个字段对列表进行排序

  10. 10

    根据要求创建具有多个字段的对象?

  11. 11

    如何使用对象列表过滤多个字段

  12. 12

    如何通过多个字段在客户端对Java对象排序?

  13. 13

    如何对包含单词和数字的字段的对象列表进行排序?

  14. 14

    如何根据重复字段对对象列表进行排序?

  15. 15

    如何在nHibernate中部分投影具有多个字段的子对象

  16. 16

    Angular-7-如何从具有多个字段的Response中创建对象?

  17. 17

    如何在 Django 中过滤具有多个字段对象的查询集?

  18. 18

    如何具有基于特定字段的排序对象集?

  19. 19

    如何在没有比较器/可比较器的情况下按字段对对象的ArrayList进行排序

  20. 20

    如何在字段上使用RuleBasedCollator对Java对象列表进行排序?

  21. 21

    如何在Java中比较对象并对列表进行排序

  22. 22

    Linq用于将数据过滤到具有多个字段的对象中,其中之一是List <string>

  23. 23

    如何按对象的子对象字段对对象进行排序?

  24. 24

    如何使用比较器对集合中的多个字段进行排序?

  25. 25

    无法对JavaScript(AngularJS)中多个字段上的对象进行排序

  26. 26

    使用Scala sortWith函数对对象中的多个字段进行排序

  27. 27

    Java - 从对象获取具有公共超类的字段列表

  28. 28

    比较Java中的两个对象..每个对象都有两个字段

  29. 29

    对具有多个值的对象进行排序

热门标签

归档