在java中对相关文本文件进行排序,创建公共索引

时间:2011-03-14 09:32:02

标签: java sorting object

大家好 我想对2个相关文件进行排序,创建一个可以对它们进行排序的唯一索引

我有一个.txt文件,格式如下:

File1

Houston
Chicago
Seattle
Cleveland

另一个文件的格式如下:

File2

44
33
55
22

我想要以下输出:

Seattle 55
Houston 44
Chicago 33
Cleveland 22

我已经从.txt文件中创建了2个对象数组,因此我不能使用bubblesort,因为“<或>”运营商。我使用.sort函数对分数进行排序,但这样我就不会创建索引来对团队进行排序。我该如何解决这个问题呢?

这是我的代码

 private void visualizzaClassificaButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                           
    // TODO add your handling code here:
    List<String> teams = new ArrayList<String>();
    List<Float> scores = new ArrayList<Float>();

    try {
        FileInputStream fstream = new FileInputStream("C:/Users/Fra....../file1");
        FileInputStream fstream2 = new FileInputStream("C:/Users/Fra...../file2");
        DataInputStream in = new DataInputStream(fstream);
        DataInputStream in2 = new DataInputStream(fstream2);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));
        String team = null;
        String score = null;

        while ((score = br.readLine()) != null && (team = br2.readLine()) !=null)   {
            teams.add(team);
            scores.add(Float.parseFloat(score));
        }

        Object[] squadreTutte = teams.toArray();
        Object[] punteggiTutti = scores.toArray();
        Arrays.sort(punteggiTutti, Collections.reverseOrder());
        //????????????????????????????????
        for(int index=0; index<punteggiTutti.length; index++){
            System.out.println(punteggiTutti[index]);
            System.out.println(squadreTutte[index]);
        }
        in.close();
    } catch (Exception e) {
    }

}

请帮忙

3 个答案:

答案 0 :(得分:2)

几乎总是当有人想要对并行数组进行排序时,就是object denial的情况。

你应该做的是创建一个对象来保存名称,得分对:

public class Team implements Comparable<Team> {
  private final String name;
  private final int score;

  public Team(final String name, final int score) {
    this.name=name;
    this.score=score;
  }

  // add getters

  public int compareTo(Team other) {
    if (this.score != other.score) {
      return Integer.valueOf(this.score).compareTo(other.score);
    } else {
      return this.name.compareTo(other.name);
    }
  }
}

然后,在读取文件时,为文件中的每一行创建一个Team对象,将它们放入Collection并对其进行排序。您需要在班级中实施Comparable(如上所述)或提供Comparator来对其进行排序。

答案 1 :(得分:1)

对团队进行排序并在天生的工作中得分要简单得多,并且读取集合的顺序相反。顺便说一句,除非有充分理由这样做,否则不要使用浮动或浮动。改为使用Long或Double。

基于@Joachim的团队课程

List<Team> teams = new ArrayList<Team>();

BufferedReader br=new BufferedReader(new FileReader("C:/Users/Fra..../file1"));
BufferedReader br2=new BufferedReader(new FileReader("C:/Users/Fra..../file2"));

String name = null;
String score = null;
while ((score = br.readLine()) != null && (name = br2.readLine()) != null) 
    teams.add(new Team(name, Double.parseDouble(score)));
br.close();
br2.close();

// reverse sort.
Collections.sort(teams, new Comparator<Team>() {
    public int compare(Team t1, Team t2) {
        return Double.compare(t2.score, t1.score);
    }
});


for(Team t: teams)
   System.out.println(t.name + ' ' + t.score);


public class Team {
  final String name;
  final double score;

  public Team(String name, double score) {
    this.name=name;
    this.score=score;
  }
}

答案 2 :(得分:0)

目标是第一个列表中的团队按照第二个列表中的分数进行排序?

您的问题是两个列表的排序无关。你应该尝试对夫妻“团队+得分”进行排序。也许使用像List<Entry<Double, String>>这样的东西可以通过定义自定义比较器来做你想要的...