使用字符串存储双打 - Java

时间:2013-08-08 06:17:09

标签: java list sorting bukkit

所以我似乎遇到了一个小问题。我试图用字符串存储一些双打(就像它们的名字一样),然后能够按降序排序。

我还希望将它们存储在某个地方,比如hashmap,arraylist,list等......我不确定哪个是最好的。

有点像 让我们假设它们以某种方式存储,如hashmap,list等......

Bob: 6.0
Mary: 5.4
Bill: 6.3
Ann: 5.0
Jim: 6.0

然后将它们输出为:

Bill: 6.3
Bob: 6.0 //Notice, it must be able to support duplicates. 
Jim: 6.0
Mary: 5.4
Ann: 5.0

我希望这对其他人有意义,如果不让我知道,我可以尝试清理它。

P.S。我找了这样的其他线程,但找不到适合我需要的线程。

编辑:我似乎找到了一种可以某种方式运作的方式......如果你有兴趣看到,我在这里有一个pastebin链接:http://pastebin.com/qWJbD5MZ

现在,代码是基于Bukkit API构建的,因此它可能对其他人没有用处。

3 个答案:

答案 0 :(得分:9)

最简单的方法是创建一个包装类:

class Person {
    String name;
    double score;
    //constructor, getters etc.
}

然后将这些人列入名单:

List<Person> list = Arrays.asList(new Person("Bob", 6),
                                  new Person("Mary", 5.4),
                                  new Person("Bill", 6.3),
                                  new Person("Ann", 5.0),
                                  new Person("Jim", 6.0));

最后用比较分数的自定义比较器对它们进行排序:

Collections.sort(list, comparator);

比较器看起来像:

Collections.sort(list, new Comparator<Person>() {

    @Override
    public int compare(Person o1, Person o2) {
        //sort by score
        if (o1.score != o2.score)
            return Double.compare(o1.score, o2.score);
        //if same score, sort by name
        return o1.name.compareTo(o2.name);
    }
});

答案 1 :(得分:2)

如果您不需要能够按键查找值,最简单的方法是定义一个具有名称和整数属性的类型,然后让它实现java.lang.Comparable接口通过比较整数值,并将数据存储在TreeSet中以获取已排序的集合。

如果您希望能够通过字符串值查找值并使它们按整数排序,则可能需要组合两个数据结构。您可以通过将数据存储在HashMap中同时具有已排序的集合来完成此操作,但您必须做一些工作以保持两个结构之间的数据同步。

答案 2 :(得分:0)

您可以使用 Arrays.sort 方法

public class Test {
  public static void main(String[] args) throws FileNotFoundException, IOException, ParseException {
     Person[] personArray = {new Person("Bob", 6), new Person("Mary", 5.4), new Person("Bill", 6.3),new Person("Ann", 5.0),new Person("Jim", 6.0)};

    Arrays.sort(personArray,new MyComparator());
    for(Person person:personArray){
        System.out.println(person.getName()+"  : "+person.getScore());
    }

}

}
class Person {
 String name;
 double score;

Person(String name, double score) {
    this.name=name;
    this.score = score;

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public double getScore() {
    return score;
}

public void setScore(double score) {
    this.score = score;
}

}
class MyComparator implements Comparator<Person> {

@Override
public int compare(Person o1, Person o2) {
    return o1.name.compareTo(o2.name);
}

}