ブール型を使用してArrayList
をソートします。基本的に、最初にtrue
でエントリを表示したいです。以下は私のコードです:
Abc.Java
public class Abc {
int id;
bool isClickable;
Abc(int i, boolean isCl){
this.id = i;
this.isClickable = iCl;
}
}
Main.Java
List<Abc> abc = new ArrayList<Abc>();
//add entries here
//now sort them
Collections.sort(abc, new Comparator<Abc>(){
@Override
public int compare(Abc abc1, Abc abc2){
boolean b1 = abc1.isClickable;
boolean b2 = abc2.isClickable;
if (b1 == !b2){
return 1;
}
if (!b1 == b2){
return -1;
}
return 0;
}
});
ソート前の順序:true true true false false false false true false false
ソート後の順序:false false true true true true false false false false false
別の方法は次のとおりです。
Collections.sort(abc, new Comparator<Abc>() {
@Override
public int compare(Abc abc1, Abc abc2) {
return Boolean.compare(abc2.isClickable,abc1.isClickable);
}
});
この場合、最も簡単な解決策の1つは、ブール値を整数に変換することです。ここで、false
は0
およびtrue
は1
。次に、2番目と1番目の差を返します。
そう:
int b1 = abc1.isClickable ? 1 : 0;
int b2 = abc2.isClickable ? 1 : 0;
return b2 - b1
それを行う必要があります。
なぜこのようなものを使用してはいけないのですか?簡単でJava 8
listOfABCElements = {true, false, false, true, true};
listOfABCElements.stream().sorted(Comparator.comparing(Abc::isClickable,Comparator.reverseOrder()).collect(Collectors.toList());
出力:true、true、true、false、false
reverseOrderは順序が最初にtrueであり、falseの後、それ以外の場合はfalseが最初になります
listOfABCElements.stream().sorted(Comparator.comparing(Abc::isClickable).collect(Collectors.toList());
出力:false、false、true、true、true
true
値を持つアイテムが最初に表示されるようにします。私の解決策は次のとおりです。
Collections.sort(m_mall, new Comparator<Mall>(){
@Override
public int compare(Mall mall1, Mall mall2){
boolean b1 = mall1.isClickable;
boolean b2 = mall2.isClickable;
return (b1 != b2) ? (b1) ? -1 : 1 : 0;
}
});
Java 8:
Collections.sort(abc, (abc1, abc2) ->
Boolean.compare(abc2.isClickable(), abc1.isClickable()));
その方法も可能です。
myList.sort((a, b) -> Boolean.compare(a.isSn_Principal(), b.isSn_Principal()));
Kotlinを使用すると、次のようにsmthを実行できます。
listOfABCElements.sortBy { it.isClickable }
出力:true、true、true、false、false
逆順:
listOfABCElements.sortByDescending { it.isClickable }
出力:false、false、true、true、true