web-dev-qa-db-ja.com

プリミティブなブール型でArrayListをソートします

ブール型を使用して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

19
stud91

別の方法は次のとおりです。

Collections.sort(abc, new Comparator<Abc>() {
        @Override
        public int compare(Abc abc1, Abc abc2) {
            return Boolean.compare(abc2.isClickable,abc1.isClickable);
        }
    });
34
Danilo

この場合、最も簡単な解決策の1つは、ブール値を整数に変換することです。ここで、false0およびtrue1。次に、2番目と1番目の差を返します。

そう:

        int b1 = abc1.isClickable ? 1 : 0;
        int b2 = abc2.isClickable ? 1 : 0;

        return b2 - b1

それを行う必要があります。

17
soulcheck

なぜこのようなものを使用してはいけないのですか?簡単で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

12
leonardo rey

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;
        }
    });
9
stud91

Java 8:

 Collections.sort(abc, (abc1, abc2) ->
                  Boolean.compare(abc2.isClickable(), abc1.isClickable()));
2
bphilipnyc

その方法も可能です。

myList.sort((a, b) -> Boolean.compare(a.isSn_Principal(), b.isSn_Principal()));
2
davidddp

Kotlinを使用すると、次のようにsmthを実行できます。

listOfABCElements.sortBy { it.isClickable }

出力:true、true、true、false、false

逆順:

listOfABCElements.sortByDescending { it.isClickable }

出力:false、false、true、true、true

1
Alex Koba