私はJavaの新しいプログラマーです。コレクションを使用して文字列のペアを並べ替えたい。基本的に名前を並べ替えたいのですが、名前には名と姓の2つの部分があります。ここで、リスト内の名を取得して並べ替えると、名を並べ替えながら、2 番目の名前のインデックスを変更し続ける方法を説明します。助けてください.........
4 に答える
名前を並べ替えたいので、2 つのフィールド ( firstNameとlastName )、両方のフィールドを初期化するコンストラクター、および後でテストできるように 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()メソッドを使用して並べ替えます。
これがお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。
これはあなたが必要とするもののようなものの例ですが、場合によってはオブジェクト指向のソリューションの方が良いかもしれません。文字列を配列にリストし、それらが等しくなくなるまでコンパレータで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);
2 つのソリューション:
1- 2 つのメンバーを持つ専用オブジェクトを作成し、Comparableインターフェイスを実装します。Collections.sortを使用できるようになりました
2-カスタム Comparator でCollections.sortを使用します。
いつものように、グアバには非常に優れた機能があります。注文を見る
比較可能なインターフェースを実装する
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);