-2

我写了一个比较器来比较 2 个对象。

希望每个对象的方法应该是不言自明的。当我将我的ArrayList放入Collections.sort(arrayList, comparator)时,它根本没有排序。

public int compare(User o1, User o2) {
final int followersComparison = Integer.compare(o2.getWhoThisUserIsBeingFollowedBy().size(), o1.getWhoThisUserIsBeingFollowedBy().size());

if (followersComparison != 0) {
  return followersComparison;
}

final int followingComparison = Integer.compare(o2.getWhoThisUserIsFollowing().size(), o1.getWhoThisUserIsFollowing().size());

if (followingComparison != 0) {
  return followingComparison;
}

// Note here o1 and o2 is in opposite order than above
return  Integer.compare(o1.getUserId(), o2.getUserId());

}

我希望根据这个比较器Collections.sort对我进行排序,但事实并非如此。ArrayList

4

1 回答 1

1

这个怎么样:

public int compare(User o1, User o2) {
    final int followersComparison = Integer.compare(o2.getWhoThisUserIsBeingFollowedBy().size(), o1.getWhoThisUserIsBeingFollowedBy().size());

    if (followersComparison != 0) {
      return followersComparison;
    }

    final int followingComparison = Integer.compare(o2.getWhoThisUserIsFollowing().size(), o1.getWhoThisUserIsFollowing().size());

    if (followingComparison != 0) {
      return followingComparison;
    }

    // Note here o1 and o2 is in opposite order than above
    return  Integer.compare(o1.getUserId(), o2.getUserId());

  }

似乎您在比较数字时可能遗漏了一些其他部分(例如,如果您只返回 1,o1.getwhoThisUserIsBeingFollowedBy().size() > 02.getwhoThisUserIsBeingFollowedBy().size()但如果是相反的情况怎么办)。我倾向于犯同样的错误,这就是为什么我更喜欢使用 Integer.compare

于 2019-08-03T06:28:01.820 回答