我尝试使用另一个字符串数组对双数组进行排序: 它的意思是 我有这个:
Double[] values = {6.3, 5.5 , 7.0};
String [] names ={"samah","Dalal", "Mohammad"};
samah
有5.5
,Dalal
有6.3
,Mohammad
有7.0
如果我想对双值进行排序,使用它很简单:
Arrays.sort(values);
在这种情况下,结果为{5.5,6.3,7.0}
但是如何保持这种名字数组?
结果必须是:{"Dalal","samah","Mohammad"}
由于
答案 0 :(得分:3)
添加包含两个值的新类型并实现Comparable
。
public class Person implements Comparable<Person> {
private String name;
private double score;
public Person(final String name, final double score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(final double score) {
this.score = score;
}
@Override
public int compareTo(final Person another) {
return Double.compare(score, another.score);
}
}
现在,当Person
排序时,Arrays.sort()
数组应按分数排序。
答案 1 :(得分:0)
如果我错了,请纠正我,目的是正确存储名称及其相应的值,如果是这样的话,
为什么使用两个不同的阵列? 为什么不在地图中读取值和名称?
如果您在地图中阅读它们,则不必面对维护名称和值的顺序的问题。 如果这样做,将减少对排序的需求。
答案 2 :(得分:0)
使用TreeMap作为双数据键,将值作为字符串数据。 TreeMap由其键自动排序。
答案 3 :(得分:0)
您也可以使用Comparator
解决此问题。如果要根据标记进行排序,请使用PersonMarksComparator
,如果要根据名称使用PersonNameComparator
对其进行排序。如果您想以多种方式对其进行排序,这将非常有用。
class PersonMarksComparator implements Comparator<Person> {
@Override
public int compare(Person person1, Person person2) {
return Double.compare(person1.getMarks(), person2.getMarks());
}
}
class PersonNameComparator implements Comparator<Person> {
@Override
public int compare(Person person1, Person person2) {
return person1.getName().compareTo(person2.getName());
}
}
public class Person {
private String name;
private double marks;
public Person(final String name, final double marks) {
this.name = name;
this.marks = marks;
}
//getters and setters
public static void main(String[] args) {
List<Person> persons = new ArrayList<Person>();
Person person1 = new Person("samah", 5.5);
Person person2 = new Person("Dalal", 6.3);
Person person3 = new Person("Mohammad", 7.0);
persons.add(person1);
persons.add(person2);
persons.add(person3);
Collections.sort(persons, new PersonMarksComparator());
Collections.sort(persons, new PersonNameComparator());
}
}
答案 4 :(得分:0)
试试这个。 (对于Java8)
Double[] values = {6.3, 5.5 , 7.0};
String [] names ={"samah","Dalal", "Mohammad"};
String[] sortedNames = IntStream.range(0, names.length)
.mapToObj(i -> i)
.sorted(Comparator.comparing(i -> values[i]))
.map(i -> names[i])
.toArray(String[]::new);
System.out.println(Arrays.toString(sortedNames));
结果:
[Dalal, samah, Mohammad]
过程:
IntStream
个索引 - &gt; [0,1,2] Integer
对象 - &gt; [0,1,2] sorted(Comparator)
方法)