2016-10-03 6 views
1

javaの構造体データに3つの変数を保存する必要があります。私はマップをアルファベット順に並べ替える必要があるため、treemapで考える必要があります。3文字列引数を持つTreemap java

他の構造体は、最初の引数の機能で構造体をソートできますか?以下のような

["abc","house","car"] 
["bdc","house2","car2"] 
+0

あなたは、あなたが行ごとに、そのクラスの新しいオブジェクトを作成し、行のこれらの3つの値を表すために3つのフィールドを持つ別のクラスを作成することができこれらの値を設定して、それらを 'List'に追加することで実現できます。後で 'Collections.sort(list、firstFieldComparator)'を 'Comparator'を使ってソートすることができます。 –

答えて

1

は、カスタムコンパレータで配列のリストを使用することができます。

public static void main(String[] args) { 

    List<String[]> data = new ArrayList<>(); 
    data.add(new String[]{"bdc", "house2", "car2"}); 
    data.add(new String[]{"abc", "house", "car"}); 

    printData(data); 

    Collections.sort(data, new Comparator<String[]>() { 

     @Override 
     public int compare(String[] o1, String[] o2) { 
      return o1[0].compareTo(o2[0]); 
     } 
    }); 

    System.out.println(); 
    printData(data); 

} 

public static void printData(List<String[]> data){ 
    for(String[] s: data){ 
     System.out.println(Arrays.toString(s)); 
    } 
} 

出力:ソート前

[BDC、house2、のCaR2]
[ABC、家を、車]

ソート後:
[abc、house、car]
[BDC、house2、のCaR2]

0

あなたは今、あなたは名前やその他のフィールドを使用して、それを並べ替えることができ、これらの3つのフィールド

 class Person 
    { 
    String name; 
    String houseName; 
    String carName; 
    // add getter... setter.. 
    ...... 
    } 

を持つクラスを作成することができます。

public static void main(String[] args) { 

List<Person> data = new ArrayList<>(); 
data.add(new Person(name1, housname1, carname1)); 
data.add(new Person(name2, housename2, carname2)); 

// sorting using name 
data.sort((o1, o2)->o1.getName().compareTo(o2.getName())); 

// print data 
printData(data); 

}

public static void printData(List<Person> data) 
{ 
    data.forEach(obj -> System.out.println("name" + obj.getName() + " " + "home" + obj.getHomeName() + " " + "car" + obj.getCarName())); 

}

関連する問題