stu*_*d91 19 java sorting arraylist java-collections-api
我想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
小智 37
另一种方法是:
Collections.sort(abc, new Comparator<Abc>() {
        @Override
        public int compare(Abc abc1, Abc abc2) {
            return Boolean.compare(abc2.isClickable,abc1.isClickable);
        }
    });
sou*_*eck 17
在这种情况下,最简单的解决方案之一是将布尔值转换为整数,其中false是0和true是1.然后返回第二个和第一个的差异.
所以:
        int b1 = abc1.isClickable ? 1 : 0;
        int b2 = abc2.isClickable ? 1 : 0;
        return b2 - b1
应该这样做.
小智 14
为什么不使用这样的东西,它更容易和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的顺序是第一个是真的,在假之后,在其他情况下,首先是falses
listOfABCElements.stream().sorted(Comparator.comparing(Abc::isClickable).collect(Collectors.toList());
output: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;
        }
    });
使用 Kotlin,你可以这样做:
listOfABCElements.sortBy { it.isClickable }
输出:假,假,真,真,真
以相反的顺序:
listOfABCElements.sortByDescending { it.isClickable }
输出:真、真、真、假、假
一个简单的建议是使用对象Boolean而不是 boolean 和 use Collections.sort。
但是,您必须知道 willfalse位于 the 之前true,因为 true 表示为1, false 表示为0。但是,您只需更改算法并以相反的顺序访问即可。
编辑:正如 Soulscheck 所说,您可以用来Collections.reverseOrder恢复比较器强加的顺序。
小智 5
这样也是可以的。
myList.sort((a, b) -> Boolean.compare(a.isSn_Principal(), b.isSn_Principal()));