2017-07-11 14 views
0

は、私は別の配列ソートのArrayList - Javaの

numberArray = {103,111}

を使用してnameArray = {[id:109,name:"abc"],[id:103,name:"bcd"],[id:105,name:"efg"],[id:102,name:"hij"],[id:111,name:"klm"]}

オブジェクト

のArrayListのをソートしたいです今すぐ私のソートされた配列の順序で値を持ってほしい

arrayAfterSort = {[id:103,name:"bcd"],[id:111,name:"klm"],... no matter other values in array can be of any order}

あなたは、この使用して比較を行うために私を助けてください。私はこれがJavaになることを覚えておいてください。

ありがとう

+4

あなたがこれまでに試してみましたか?コンパイラの使い方を知っていますか? – Nathan

+0

私は配列のソート値が必要なときコンパイラを使うことを知っています。別の配列を使用して配列をキャンパーにする方法についてはあまり明確ではありません。 –

答えて

1

可能Javaの8ソリューション:

nameArray.sort(Comparator.comparingInt(name -> { 
     int index = numberArray.indexOf(name.id); 
     return index == -1 ? Integer.MAX_VALUE : index; 
    })); 
0

これはカスタムコンパレータを使用して実現できます。

nameArray.sort(Comparator.comparing(MyClass::getId, numberArray::indexOf)). 

indexOfので、-1を返し、それは価値を見つけることができない場合は、それらの項目がリストの最初になります。あなたの質問は、その順序は重要ではありませんと言っていますが、たとえば、最後、またはソートし、いくつかの他の基準であることを強制したい場合:

nameArray.sort(Comparator.comparing(MyClass::getId, numberArray::contains).reversed() 
    .thenComparing(MyClass::getId, numberArray::indexOf) 
    .thenComparing(MyClass::getName)); 

最初の比較は、自然を持ってブール値を返します。逆順にする必要がある最初の偽の順序。

0

はこれを試してみてください。

List<Name> nameArray = Arrays.asList(
    new Name(109, "abc"), 
    new Name(103, "abc"), 
    new Name(105, "abc"), 
    new Name(102, "abc"), 
    new Name(111, "abc")); 
List<Integer> numberArray = Arrays.asList(103, 111); 
nameArray.sort(Comparator.comparing(n -> { 
    int index = numberArray.indexOf(n.id); 
    return index >= 0 ? index : Integer.MAX_VALUE; 
})); 
System.out.println(nameArray); 

結果:

[[id:103:name:abc], [id:111:name:abc], [id:109:name:abc], [id:105:name:abc], [id:102:name:abc]]