【问题标题】:how to sort a list according to a specific field in one line? (in java)如何根据一行中的特定字段对列表进行排序? (在Java中)
【发布时间】:2017-01-15 13:27:41
【问题描述】:

给定一个列表(ArrayList),其中包含来自特定类(也给定,称为“Point”)的项目,我如何根据 Point 类中的特定字段(int 类型)对列表进行排序(仅 x-尺寸)?

我试过this answer,我知道这个函数:Collections.sort(list_name, new comperator_name) 通常可以工作 - 但我不能更改类点或更改除主函数中的一行以外的任何内容。

两种解决方案将不胜感激:一种用于不带“compare”或“compareTo”功能的点类,另一种带有“compare”功能。

编辑:出于某种原因,有人建议 this 重复 - 我以前见过,但特别要求提供不需要实现比较器的解决方案。

【问题讨论】:

  • 您知道链接的问题/答案是针对不同的编程语言的吗?
  • 这些问题非常相关......但在这一个中,他特别要求答案是一行代码。我不认为这是完全相同的问题。无论如何,请检查我的答案...我认为它可以解决您的问题
  • luk2302 我知道,并且仍然发现表明我研究了这些想法并没有发现它们有帮助是有帮助的。 JornVernee 为什么这里的每个人都急于投反对票并标记重复?我特别要求不要使用比较器 - 所以不,使用比较器的情况与不使用它的情况不同。 LeandroBorgesFerreira 谢谢你——你是真正的 MVP。

标签: java sorting


【解决方案1】:

现在 Java 8 List 有

List.sort(Comparator<? super E> c). 

比较器有:

comparing(Function<? super T,? extends U> keyExtractor)

所以你可以做你可以使用使用

List.sort(Comparator.comparing(Point::someField))

Java 8 在 Collections 包中进行了许多更新,因此现在您有了许多新方法,您可以使用这些方法来使您的代码更精简...就像只用一行对列表进行排序。

玩得开心!

在这里阅读: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

在这里:https://docs.oracle.com/javase/8/docs/api/java/util/List.html

有关 Java 8 中的比较器列表的更多信息。

【讨论】:

    【解决方案2】:
    List.sort(Comparator<? super E> c). 
    

    然后添加比较器

    comparing(Function<? super T,? extends U> keyExtractor)
    

    然后最后使用

    List.sort(Comparator.comparing(Point::someField))
    

    【讨论】:

      猜你喜欢
      • 2016-11-18
      • 2020-11-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多