2017-09-26 19 views
-1

名前、住所、年齢を持つpersonオブジェクトを含むArrayListを追加するメソッドを作成しています。彼らは最低から最高まで注文するべきです。鉱山は最後の場所で終わらないか空でない場合にのみ機能しますが、どうすれば自分のコードを別に書くことができますか?(年齢順)アライリストに追加

public void addAgeSorted(Person p){ 
int a = 0; 
while(p.getAge() >= this.plist.get(a).getAge()){ 
    a++; 
    } 
this.plist.add(a,p); 
} 

答えて

2

あなたは自分の人を追加し、年齢によって、リストを並べ替え、あなたはコンパレータを使用できるJava 8以降を使用している場合。あなたがやろうとしているもの

plist.sort(Comparator.comparing(Person::getAge)); 
0

外観:

public void addAgeSorted(Person p){ 

は、なぜあなたは代わりにpriorytyキューを使用していけませんか?

Comparator<Person> foo = (o1, o2) -> Integer.compare(o1.getAge(), o2.getAge()); 

PriorityQueue<Person> queueOfPersons = new PriorityQueue<>(foo); 

queueOfPersons.add(new Person(51)); 
queueOfPersons.add(new Person(23)); 
queueOfPersons.add(new Person(33)); 
queueOfPersons.add(new Person(1)); 

これは、あなたがそれを挿入したら、それは

0

ただ、人の年齢に基づいて、コンパレータを書いて、それを使用する...あなたのための要素をソートしますので、右のコレクションです。

Comparator<Person> c = new Comparator<Person>() { 

    @Override 
    public int compare(Person o1, Person o2) { 
     return Integer.compare(o1.getAge(), o2.getAge()); 
    } 
}; 
list.sort(c); 
0
Collections.sort(personList, new Comparator<Person>() { 
public int compare(Person p1, Person p2) { 
    return p1.getAge().compareTo(p2.getAge()); 
} 
}); 

これは私が右のそれを得る場合は、特定のインデックスであなたすでにソートされた人のリストにオブジェクトを追加したいあなたの条件のため

0

に動作します。条件付きチェックを追加することで、ロジックが失敗する2つのケースを処理できます。

public void addAgeSorted(Person p){ 
    if(plist.isEmpty()){ 
     this.plist.add(p); 
    } 
    //if age of person to add higher than all in the list    
    else if(p.age > plist.get(plist.size()-1).getAge()) { 
     this.plist.add(p);   
    } 
    else{ 
     int a = 0; 
     while(p.getAge() >= this.plist.get(a).getAge()){ 
      a++; 
     } 
     this.plist.add(a,p); 
    } 
}