给定一个列表(ArrayList),包含来自特定类的项(也称为“Point”),如何根据Point类中的特定字段(int类型)对列表进行排序(仅限x-尺寸)?
我尝试this answer,我知道函数:Collections.sort(list_name,new comperator_name)通常有效 - 但是我不能更改类点或更改main函数中除一行之外的任何内容。
我们将欣赏两个解决方案:一个用于没有“比较”或“比较”功能的点类,另一个用于“比较”功能。
编辑:出于某种原因,有人建议将this作为副本 - 我之前看过它,但特别要求提供一个不需要实现编译器的解决方案。
答案 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))