2016-09-12 13 views
1

2014年から2010年までのリストを注文しようとしていますが、2010年から2014年にマージしました。どのように変更できますか?比較がゼロより大きい場合最大から最大までのマージ

import java.util.Comparator; 
import mundoA.Registro; 

public class RegistroComparadorA implements Comparator<Registro> { 

    public int compare(Registro r1, Registro r2) { 
    int rta = 0; 
    if (r1.getAnio() >r2.getAnio()) { 
     rta = 1; 
    } else if (r1.getAnio() < r2.getAnio()) { 
     rta = -1; 
    } else { 
     rta = r1.getWard().compareTo(r2.getWard()); 
    } 
    return rta; 
    } 
} 

    public NodoListaSencilla<T> merge(NodoListaSencilla<T> a, NodoListaSencilla<T> b) { 
    NodoListaSencilla<T> dummyHead, curr; 
    dummyHead = new NodoListaSencilla<T>(a.getElemento()); 
    curr = dummyHead; 
    while(a !=null && b!= null) { 
     if(c.compare(a.getElemento(), b.getElemento())>0) { 

     curr.setSiguiente(b); 
     b = b.getSiguiente(); 

     } 
     else {    
     curr.setSiguiente(a); 
     a= a.getSiguiente();      
     } 
     curr = curr.getSiguiente(); 
    } 
    curr.setSiguiente((a == null) ? b : a); 
    return dummyHead.getSiguiente(); 
    } 
+0

あなたが 'merge'を呼び出すとき、' a'と 'b'は既にあなたが望む順番で(後で最初に)順番に並んでいますか? – ajb

答えて

0

私はあなたのコードを理解していれば、あなたが比較されている要素abbに現在の要素を設定:

これは、比較器です。より高い年を最初に望む場合は、aに設定する必要があります。

Comparatorには、実行中の方法で明示的にcompareを定義する必要がないユーティリティ機能があります。次のように注文を定義することができます:

Comparator<Registro> order = Comparator 
    .comparing(Registro::getAnio) 
    .reversed() 
    .thenComparing(Registro::getWard); 

これは私にとってより明白です。

関連する問題