29

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

4

8 に答える 8

51

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

Collections.sort(abc, new Comparator<Abc>() {
        @Override
        public int compare(Abc abc1, Abc abc2) {
            return Boolean.compare(abc2.isClickable,abc1.isClickable);
        }
    });
于 2015-01-17T17:59:09.670 に答える
5

簡単な提案はBoolean、ブール値の代わりにオブジェクトを使用して を使用することCollections.sortです。

ただし、true は、 false は として表されるためfalse、 が の前になることを知っておく必要があります。ただし、アルゴリズムを変更して逆の順序でアクセスすることもできます。true10

編集Collections.reverseOrder:soulscheckが述べたように、コンパレータによって課された順序を元に戻すために使用できます。

于 2015-01-17T17:49:19.260 に答える
4

Java 8:

 Collections.sort(abc, (abc1, abc2) ->
                  Boolean.compare(abc2.isClickable(), abc1.isClickable()));
于 2016-07-27T23:34:53.733 に答える