2016-12-18 4 views
-2

私は大学のデータベースを作る必要があるプログラムを作成しています。データを保存するためにマップを使用していましたが、属性の名前でコードを表示するために属性の並べ替えを行う必要がありましたが、その方法はわかりません。どうもありがとう!arraylistの属性でマップ<Object、ArrayList <Object>>をソートするにはどうすればよいですか?

public class Student { 
    private String apellido = ""; 
    private String nombre = ""; 
    private String correo = ""; 
    private String dni = ""; 

    public Student(String lastname, String name, String mail, String id)     
    { 
     this.lastname = lastname; 
     this.name = name; 
     this.mail = mail; 
     this.id = id; 
    } 
} 


public class Subject { 
    private String name = ""; 
    private int code 
    private int course; 

    public Subject(String name, int code, int course) { 
     this.name = name; 
     this.code = code; 
     this.course = course; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getCode() { 
     return code; 
    } 

    public int getCourse() { 
     return course; 
    } 
} 


public class Model { 
private Map<Subject, List<Student>> map = new HashMap<>(); 

    public void orderByCourse() { 
    System.out.printf("%-20s %-6s\n", "subject", "code"); 
    List<String> list = new ArrayList<String>(); 
    for (Entry<Subject, List<Student>> element : map.entrySet()){ 
     Subject key = element.getKey(); 
     List<Student> value = element.getValue(); 
     System.out.printf("%-20s %-6s\n", key.getName(), key.getCode()); 
    } 
} 
+0

エントリの「値」は重要ですか?あるいは、あなたは 'キー 'だけに関心がありますか? – 4castle

+0

@ 4castle私は知っています、それはどういうわけかこの質問の重複です。 – msagala25

+0

@msagala質問はそれ自体に重複していますか?どのようにメタ... – Tom

答えて

0

いえば技術的には、あなたはMapを並べ替えることはできません。 Mapのキーと値の順序/順序は、Mapの実装によって制御されます。

あなたは何ですか doはマップのキーセット、バリューセットまたはエントリセットのコピーをとり、そのコピーをソートします。ただし、これは元のマップのエントリの順序には影響しないことに注意することが重要です。

だからあなたの質問には、実際には2つのサブ質問に沸く:

質問:どのようにあなたがそれぞれのセットをコピーするのですか?

回答:コピーコンストラクタArrayList(Collection)を使用してください。

質問:リストの要素クラスの属性に基づいて配列リストを並べ替えるにはどうすればよいですか?

Answer:必要な属性の値に基づいて要素インスタンスのペアを注文する要素クラスのオブジェクトを作成します。 Sort ArrayList of custom Objects by propertyも参照してください。

関連する問題