0

Java の Comparator を使用して関数の EList をソートしようとしていますが、sort() を呼び出した後にリストがソートされません。

私がそれを実装する方法は次のとおりです。

//Func.xtend <-- Start -->

public class NameComparator implements Comparator<Function_Name> {  
    override int compare (Function_Name function1, Function_Name function2)
    {
        return function1.func.compareToIgnoreCase(function2.func)
    }
}

public class CheckNames {   
    def void checkDuplicateNames(Main_func para_func) {
        var EList<Function_Name> functions = para_func.getContains()        
        var NameComparator pc = new NameComparator()

        functions.sort(pc) //<-- sorting here

        var Iterator<Function_Name> oIt = functions.iterator ()
        while (oIt.hasNext)
        {           
            var Function_Name func = oIt.next   ()
            System::out.println(func.func.toString)
        }
    }
}

// <-- End -->

私は何か間違ったことをしていますか?理論的には、 functions.sort(pc) を呼び出した後、変数「関数」の内容は既にソートされているはずですよね? それとも、まだ何らかの処理を行う必要がありますか?

4

1 に答える 1

3

私の知る限り、List::sortXtend はその場でソートせず、ソートされた新しいリストを返します。List::sortInPlaceそのため、代わりに電話する必要があります。

これとは別に、一意のEList (たとえば、コンテインメント) をその場で並べ替えようとすると、問題が発生する可能性があります。並べ替え操作中 (Xtend が実際java.util.Collections.sortにこれを呼び出します)、一部の要素が一時的にリストに 2 回含まれる場合があります。ただし、一意のリストは重複をチェックしIllegalArgumentException、要素を 2 回目に追加しようとすると をスローします (「 」を参照AbstractEList.set(in, E))。これを避けるには、次のように一意の EList を並べ替える必要があります。

var sortedFunctions = functions.sort(pc)
functions.clear()
functions.addAll(sortedFunctions)
于 2013-02-13T12:44:07.047 に答える