按整数列表对字符串列表进行排序
Sort list of string by list of integer
我是 Java 的新手。这里肯定有人问过这个问题,但我不确定是哪个问题。考虑这个 Java 代码片段。
ArrayList<String> names = new ArrayList<>();
ArrayList<Integer> ages = new ArrayList<>();
names.add("John");
names.add("Kate");
names.add("Bob");
ages.add(27);
ages.add(24);
ages.add(32);
如何将names
按ages
排序?即新的names
应该是["Kate", "John", "Bob"]
.
您可以使用属性创建 class 并使用基于不同属性进行比较的不同比较器。然后使用包含新 class.
对象的 ArrayList
参见:
How to sort 2 ArrayLists of different types of data in the same order?
一种方法是使用名称作为键并使用年龄作为值来填充哈希图。然后,使用此查找映射进行排序。
Map<String, Integer> map = new HashMap<>();
for (int i=0; i < names.size(); ++i) {
map.put(names.get(i), ages.get(i));
}
Collections.sort(names, (a, b) -> map.get(a).compareTo(map.get(b)));
正如其他一些评论和答案所暗示的,您还可以创建一个人 class,它将姓名和年龄存储在一个逻辑对象中。然后,编写一个根据年龄排序的比较器。
您有两个不相关的列表,如果不指定它们的链接方式,则不能根据另一个列表对一个列表进行排序。
最直接的方法是创建一个 class Person
来存储姓名和年龄,使用单个列表并使用年龄 Comparator
对该列表进行排序。
我是 Java 的新手。这里肯定有人问过这个问题,但我不确定是哪个问题。考虑这个 Java 代码片段。
ArrayList<String> names = new ArrayList<>();
ArrayList<Integer> ages = new ArrayList<>();
names.add("John");
names.add("Kate");
names.add("Bob");
ages.add(27);
ages.add(24);
ages.add(32);
如何将names
按ages
排序?即新的names
应该是["Kate", "John", "Bob"]
.
您可以使用属性创建 class 并使用基于不同属性进行比较的不同比较器。然后使用包含新 class.
对象的 ArrayList参见: How to sort 2 ArrayLists of different types of data in the same order?
一种方法是使用名称作为键并使用年龄作为值来填充哈希图。然后,使用此查找映射进行排序。
Map<String, Integer> map = new HashMap<>();
for (int i=0; i < names.size(); ++i) {
map.put(names.get(i), ages.get(i));
}
Collections.sort(names, (a, b) -> map.get(a).compareTo(map.get(b)));
正如其他一些评论和答案所暗示的,您还可以创建一个人 class,它将姓名和年龄存储在一个逻辑对象中。然后,编写一个根据年龄排序的比较器。
您有两个不相关的列表,如果不指定它们的链接方式,则不能根据另一个列表对一个列表进行排序。
最直接的方法是创建一个 class Person
来存储姓名和年龄,使用单个列表并使用年龄 Comparator
对该列表进行排序。