0

列に基づいて並べ替える方法はありますか?

私は次のような行を持っています、

1000 Australia     Kangaroo            Canberra
1002 India         Tiger               Delhi
1092 Germany       Eagle               Berlin

上記の行は、オーストラリア、ドイツ、インドの 2 列目に基づいて並べ替える必要があります。

したがって、結果は次のようになります。

1000 Australia     Kangaroo            Canberra
1092 Germany       Eagle               Berlin   
1002 India         Tiger               Delhi

データはテキストファイルから

4

3 に答える 3

2

TreeSetを使用してテキスト ファイルを読み取り、データを を実装するクラスに保持することをお勧めしますComparable。そうすればTreeSet、データに追加するときに、ソートされた順序で追加されます。

この例は役立つかもしれません:

class Data implements Comparable<Data>{

    private int digits;
    private String country;
    private String animal;
    private String capital;

    public Data(int digits, String country, String animal, String capital){
        this.digits = digits;
        this.country = country;
        this.animal = animal;
        this.capital = capital;
    }

    public int getDigits() {
        return digits;
    }

    public void setDigits(int digits) {
        this.digits = digits;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getAnimal() {
        return animal;
    }

    public void setAnimal(String animal) {
        this.animal = animal;
    }

    public String getCapital() {
        return capital;
    }

    public void setCapital(String capital) {
        this.capital = capital;
    }

    @Override
    public int compareTo(Data data) {
        return getCountry().compareTo(data.getCountry());
    }
}


class TestCountry{
    public static void main(String[] args) {
        TreeSet<Data> set = new TreeSet<Data>();
        /** 
         * Assuming that you can read the CSV file and build up the Data objects.
         * You would then put them in the set where they will be added in a sorted
         * fashion 
         */
        set.add(new Data(1000, "Australia", "Kangaroo", "Canberra"));
        set.add(new Data(1002, "India", "Tiger", "Delhi"));
        set.add(new Data(1092, "Germany", "Eagle", "Berlin"));

        for(Data data: set){
            System.out.println(data.getDigits()+"\t"+data.getCountry()+"\t"+data.getAnimal()+"\t"+data.getCapital());
        }
    }
}
于 2012-08-26T08:31:26.550 に答える
1

このモデルとしてデータを構造化できます

行データを表す行クラス

public class Row implements Comparable<Row> {

private int number;
private String country;
private String animal;
private String city;

public Row(int number, String country, String animal, String city) {
    super();
    this.number = number;
    this.country = country;
    this.animal = animal;
    this.city = city;
}

public int getNumber() {
    return number;
}

public void setNumber(int number) {
    this.number = number;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

public String getAnimal() {
    return animal;
}

public void setAnimal(String animal) {
    this.animal = animal;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

// Easy to print and show the row data
@Override
public String toString() {
    return "Row [number=" + number + ", country=" + country + ", animal="
            + animal + ", city=" + city + "]";
}

// sort based on column "country"
@Override
public int compareTo(Row o) {
    return this.country.compareTo(o.country);
}

}

テストは次のようになります

public static void main(String[] args) {

    ArrayList<Row> data = new ArrayList<Row>();
    data.add(new Row(1000, "Australia", "Kangaroo", "Canberra"));
    data.add(new Row(1002, "India", "Tiger", "Delhi"));
    data.add(new Row(1092, "Germany", "Eagle", "Berlin"));

    // To sort the data (based on column "country")
    Collections.sort(data);

    // Print and show the data
    for (int i = 0; i < data.size(); i++) {
        System.out.println(data.get(i));
    }


}
于 2012-08-26T09:05:24.507 に答える
0

そのファイルを 1 行ずつ読み、各行で StringTokenizer を使用して 1 つの単語にアクセスすることをお勧めします。次に、国をキーとして各行を HashMap に入れることができます。

使用する

Collection<String> k = yourHashMap.keySet();
Collections.sort(k);

キーセットを自然な順序で並べ替えます。次に、キーセットを反復処理し、ハッシュマップの各行にソートされた方法でアクセスできます。

于 2012-08-26T08:07:45.800 に答える