在Java中,按多个其他列表对列表进行排序
我有多个相同大小的列表,需要按所有其他列表对其中一个进行排序。可以传入的列表数量没有限制,它们的顺序也很重要。此外,用户可能希望对列表进行升序或降序排序。例如,有人可能希望先按年龄降序排列人员列表,如果他们的年龄相同,则按名字升序排列在Java中,按多个其他列表对列表进行排序,java,sorting,Java,Sorting,我有多个相同大小的列表,需要按所有其他列表对其中一个进行排序。可以传入的列表数量没有限制,它们的顺序也很重要。此外,用户可能希望对列表进行升序或降序排序。例如,有人可能希望先按年龄降序排列人员列表,如果他们的年龄相同,则按名字升序排列 List people = List.of("John Doe", "Jane Doe", "Abe Smith") List ages = List.of(20, 25, 20) List firstNames = List.of("John", "Jane",
List people = List.of("John Doe", "Jane Doe", "Abe Smith")
List ages = List.of(20, 25, 20)
List firstNames = List.of("John", "Jane", "Abe")
sort(people, ages, "desc", firstNames, "asc")
Result: ["Jane Doe", "Abe Smith", "John Doe"]
编辑:用户可以按他们想要的任何其他列表对他们想要的任何列表进行排序,只要它们大小相同。不仅仅是人。这只是他们可能想要排序的数据类型的一个例子。- 创建通用函数f(人员、列表1、描述、列表2、asc…)
- 将hashMap对象和存储、人员作为键和值list1、list2,创建MyComperator类并按值排序
age
和firstName
的类Person
,然后使用链式比较器
。然而,@azurefrog是对的,它看起来像Python。如果您能够做出某些假设(列表的大小相同;列表包含可比较的元素等),这当然是可能的。你试图解决这个问题了吗?是的,我可以很容易地解决这个问题,将一个列表按另一个列表排序,但它不能真正扩展到多个列表。我一直在考虑@Michael和链接多个比较器,但我希望有一个更简单的解决方案或库可能会有所帮助。也许有,但我不知道有一个更简单的解决方案。这很容易实现。我最后做了一些非常类似的事情,但正如问题所提到的,我还需要每个列表的特定排序方向。我把它们储存在一个单独的列表中。然后,我通过一次比较两个项目对所有项目进行排序,在排序列表中循环每个项目。如果项目相同,则继续向下搜索列表,否则返回比较结果(如果排序按该索引递减,则乘以-1)