0

私はJavaの新しいプログラマーです。コレクションを使用して文字列のペアを並べ替えたい。基本的に名前を並べ替えたいのですが、名前には名と姓の2つの部分があります。ここで、リスト内の名を取得して並べ替えると、名を並べ替えながら、2 番目の名前のインデックスを変更し続ける方法を説明します。助けてください.........

4

4 に答える 4

4

名前を並べ替えたいので、2 つのフィールド ( firstNamelastName )、両方のフィールドを初期化するコンストラクター、および後でテストできるように getter を持つクラスNameを作成するのが論理的です。

public class Name {
    private String firstName;
    private String lastName;

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

ここで、名前を比較できるようにしたいので、NameがComparableインターフェースを実装していることを確認する必要があります。このインターフェースを実装するには、2 つのオブジェクトを比較する方法をプログラムに指示するcampareTo()メソッドをオーバーライドする必要があります。そのようです:

public class Name implements Comparable<Name> {
    private String firstName;
    private String lastName;

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    @Override
    public int compareTo(Name otherName) {
        if(this.firstName.compareTo(otherName.firstName) == 0) {
            return this.lastName.compareTo(otherName.lastName);
        }
        else {
            return this.firstName.compareTo(otherName.firstName);
        }
    }
}

compareTo()メソッドで何が起こるか: 最初に名前が等しいかどうかをチェックします ( compareToはゼロを返します)。その場合は、姓を使用して並べ替えます。それ以外の場合は、名前を使用して並べ替えます。Strings の compareTo メソッドの詳細については、http: //docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)を参照してください。

これで、このテスト クラスを使用してテストできます。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

    public class Test {
        public static void main(String[] args) {
            Name name = new Name("A", "C");
            Name name1 = new Name("A", "A");
            Name name2 = new Name("Ba", "F");
            Name name3 = new Name("Bb", "A");
            Name name4 = new Name("Ca", "D");
            Name name5 = new Name("Cc", "Z");
            Name name6 = new Name("Cc", "W");


            Name nameArray[] = {name, name1, name2, name3, name4, name5, name6};
            List<Name> names = new ArrayList<Name>(Arrays.asList(nameArray));

            Collections.sort(names);

            for(Name n : names) {
                System.out.println(n.getFirstName() + " " + n.getLastName());
            }
        }
    }

名前のリストを作成し、Collections.sort()メソッドを使用して並べ替えます。

これがお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-03-13T19:53:46.303 に答える
1

これはあなたが必要とするもののようなものの例ですが、場合によってはオブジェクト指向のソリューションの方が良いかもしれません。文字列を配列にリストし、それらが等しくなくなるまでコンパレータで1つずつ比較します。アレイはペアを維持し、コンパレータが順序を処理します。

    List<String[]> strings;
    Comparator comparator = new Comparator<String[]>(){

        @Override
        public int compare(String[] o1, String[] o2) {
            //if parameters are invalid, throw them out.
            if(o1 == null || o2 == null || o1.length == 0 || o2.length == 0){
                throw new InvalidParameterException();
            }

            //Compare the two arrays of strings, string by string.
            int length = Math.min(o1.length, o2.length);
            for(int i  = 0; i < length; i++){
                int compare = o1[i].compareTo(o2[i]);
                if(compare != 0){
                    return compare;
                }
            }

            //If the two strings are of different lengths but the same until that point, return the longer string as greater.
            if(o1.length > o2.length){
                return 1;
            }  else if(o2.length > o1.length) {
                return -1;    
            }
            return 0;
        }
    };
    Collections.sort(strings, comparator);
于 2013-03-13T19:32:52.690 に答える
1

2 つのソリューション:

1- 2 つのメンバーを持つ専用オブジェクトを作成し、Comparableインターフェイスを実装します。Collections.sortを使用できるようになりました

2-カスタム Comparator でCollections.sortを使用します。

いつものように、グアバには非常に優れた機能があります。注文を見る

于 2013-03-13T19:14:35.640 に答える
0

比較可能なインターフェースを実装する

Class Student implements Comparable{
    private String FirstName;
    private String SecondName;
    // getters and setters
    public int compareTo(Student s){
        return this.getFirstName().compareTo(s.getFirstName());
    } 
}
List<Student> list = new ArrayList();

Collections.sort(list);
于 2013-03-13T19:21:05.283 に答える