【问题标题】:How to sort ArrayLists using booleans in java?java - 如何在java中使用布尔值对ArrayLists进行排序?
【发布时间】:2013-08-28 08:19:11
【问题描述】:

我有一个带有自定义对象的 ArrayList。它们包含一个我想要排序的复选框对象。我正在使用这个比较器函数对其进行排序:

我正在使用 XOR 运算符来检查它们是否彼此相等,然后取反。

但是这不起作用,并且列表保持相同的顺序。

有谁知道怎么回事?

public class CustomSelectSort implements Comparator<ObjPerson> {
    @Override
    public int compare(ObjPerson o1, ObjPerson o2) {
        return !(o1.select.isChecked() ^ o2.select.isChecked()) ? 1 : -1;
    }
}

【问题讨论】:

  • 你能说明你在哪里调用排序吗?
  • 您是否尝试过使用!= 而不是按位操作?
  • 好吧,当true, falsefalse, true 相同时,它显然不起作用。 (假设您正在排序以分隔 truefalse
  • 如果您的项目使用 Java 1.7,请查看我编辑的帖子

标签: java android sorting arraylist


【解决方案1】:

您只返回 -1(小于)或 +1(大于),从不返回 0(等于)。

java.util.Comparator definition

比较它的两个参数的顺序。返回一个负整数, 零或正整数,因为第一个参数小于、等于 到或大于秒。

在前面的描述中,符号 sgn(expression) 表示 数学符号函数,它被定义为返回一个 -1、0 或 1 根据表达式的值是负数、零还是正数。

实施者必须确保 sgn(compare(x, y)) == -sgn(compare(y, x)) 对于所有 x 和 y。 (这意味着 compare(x, y) 必须抛出一个 异常当且仅当 compare(y, x) 抛出异常。)

实现者还必须确保关系是可传递的: ((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0。

最后,实现者必须确保 compare(x, y)==0 意味着 所有 z 的 sgn(compare(x, z))==sgn(compare(y, z))。

通常是这样,但并不严格要求 (compare(x, y)==0) == (x.equals(y))。一般来说,任何比较器 违反此条件应明确表明这一事实。这 推荐的语言是“注意:这个比较器强加的顺序是 与equals不一致。”

Java 1.7 之前的提案:

public int compare(ObjPerson o1, ObjPerson o2) {
   boolean b1 = o1.select.isChecked();
   boolean b2 = o2.select.isChecked();
   if( b1 && ! b2 ) {
      return +1;
   }
   if( ! b1 && b2 ) {
      return -1;
   }
   return 0;
}

提案since Java 1.7

public int compare(ObjPerson o1, ObjPerson o2) {
   boolean b1 = o1.select.isChecked();
   boolean b2 = o2.select.isChecked();
   return Boolean.compare( b1, b2 );
}

【讨论】:

  • 帖子已编辑,因为 Java 1.7 为 Boolean 类添加了静态布尔比较器
  • 已将 boolean b1 & b2 更改为 Boolean b1 & b2,因为 boolean 不调用它由 Boolean 提供的比较函数。
  • @AkashG:显式调用与 Boolean.compare 一起使用,此处未使用推理。见docs.oracle.com/javase/8/docs/api/java/lang/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 2010-10-28
  • 2015-07-03
  • 2019-04-19
  • 2021-02-11
  • 1970-01-01
相关资源
最近更新 更多