如何使用基于值的对象参数填充数组?

时间:2014-07-05 04:20:52

标签: java android arrays string object

如果我有一定数量的对象,每个对象都有多个参数,我怎样才能为所有对象填充一个特定参数的数组,但是根据另一个参数使数组中元素的顺序。例如,我有这段代码:

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按升序排列。如果这个问题的措辞不好,我很抱歉,但我希望这是有道理的。

2 个答案:

答案 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);进行排序。