如果我有一定数量的对象,每个对象都有多个参数,我怎样才能为所有对象填充一个特定参数的数组,但是根据另一个参数使数组中元素的顺序。例如,我有这段代码:
public CollegeList(double gpa, int act, int sat, String name, String location){
this.gpa = gpa;
this.act = act;
this.sat = sat;
this.name = name;
this.location = location;
if(act/36.0>sat/2400.0){
this.score = 0.6*gpa*25.0+0.4*(act/36.0)*100.0;
}else{
this.score = 0.6*gpa*25.0+0.4*(sat/2400.0)*100.0;
}
this.scoreDistance = Math.abs(this.score-MainActivity.scoreDouble)/MainActivity.scoreDouble;
}
public double getGpa(){
return this.gpa;
}
public int getAct(){
return this.act;
}
public int getSat(){
return this.sat;
}
public String getName(){
return this.name;
}
public String getLocation(){
return this.location;
}
public double getScore(){
return this.score;
}
public double getScoreDistance(){
return this.scoreDistance;
}
在这里,我想为我可能创建的所有对象的name参数填充一个String数组,但是这些名称由数组中的double scoreDistance按升序排列。如果这个问题的措辞不好,我很抱歉,但我希望这是有道理的。
答案 0 :(得分:1)
1)创建一个包含您要排序的对象的CollegeList[]
或ArrayList<CollegeList>
。
2)创建一个Comparator<CollegeList>
,通过比较CollegeList
来比较两个scoreDistance
个对象。在Java 8中(是的,我知道这不适用于Android,但其他读者可能会觉得这很有用):
Comparator<CollegeList> compareByScoreDistance = (CollegeList a, CollegeList b) -> Double.compare(a.getScoreDistance(), b.getScoreDistance());
在Java 7中:
Comparator<CollegeList> compareByScoreDistance = new Comparator<CollegeList>() {
@Override
public int compare(CollegeList a, CollegeList b) {
return Double.compare(a.getScoreDistance(), b.getScoreDistance());
}
};
3)使用比较器对数组或ArrayList
进行排序。如果它是一个数组:
Arrays.sort(theArray, compareByScoreDistance);
如果是ArrayList
,请使用Collections.sort
代替Arrays.sort
。
4)现在,您可以通过CollegeList[]
或ArrayList<CollegeList>
并使用ArrayList
创建数组或getName()
来创建字符串数组。例如,如果您的列表是ArrayList
,那么您可以使用@ user3717646的答案:
for (CollegeList collegeList : theList) {
nameList.add(collegeList.getName());
}
或者使用Java 8:
String[] names = theList.stream().map(CollegeList::getName).toArray(String[]::new);
或
ArrayList<String> names = new ArrayList<>(theList.stream().map(CollegeList::getName).collect(Collectors.toList()));
编辑:代码现已经过测试,并修复了多个错误。
答案 1 :(得分:0)
尝试使用ArrayLists。下面给出了两个CollegeList对象的示例代码。
ArrayList<CollegeList> collegeLists=new ArrayList<>(); // To store all CollegeList Objects
ArrayList<String> nameList=new ArrayList<>(); // To store Names
CollegeList cl1=new CollegeList(12, 45, 5, "Name1", "Location1");
CollegeList cl2=new CollegeList(12, 45, 5, "Name2", "Location2");
collegeLists.add(cl1);
collegeLists.add(cl2);
for (CollegeList collegeList : collegeLists) {
nameList.add(collegeList.getName());
}
collegeLists存储所有CollegeList对象。
然后你可以使用get方法获取每个参数并将其放入单独的aarraylists中。
如果您想对arraylist进行排序,可以Collections.sort(nameList);
进行排序。