如何根据一行中的特定字段对列表进行排序? (在java中)

时间:2017-01-15 13:27:41

标签: java sorting

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

我尝试this answer,我知道函数:Collections.sort(list_name,new comperator_name)通常有效 - 但是我不能更改类点或更改main函数中除一行之外的任何内容。

我们将欣赏两个解决方案:一个用于没有“比较”或“比较”功能的点类,另一个用于“比较”功能。

编辑:出于某种原因,有人建议将this作为副本 - 我之前看过它,但特别要求提供一个不需要实现编译器的解决方案。

2 个答案:

答案 0 :(得分:0)

现在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

有关Comparator和Java 8中的列表的详细信息。

答案 1 :(得分:0)

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

然后添加比较器

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

然后最后使用

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