问题标签 [comparisonchain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
14145 浏览

java - 使用比较链而不是 Objects.equal() && Objects.equal() ... 和 Guava 有什么好处

我刚刚开始使用 google 的 Guava 集合(ComparisonChainObjects)。在我的 pojo 中,我覆盖了 equals 方法,所以我首先这样做:

但是,我随后意识到我也可以使用它:

而且我看不到比较链何时会更好,因为您可以轻松添加更多条件,如下所示:

如果您特别需要返回 int,我可以看到的唯一好处。它有两个额外的方法调用(开始和结果),对于菜鸟来说更复杂。

我缺少的比较链有明显的好处吗?

(是的,我也用适当的覆盖哈希码Objects.hashcode()

0 投票
1 回答
4317 浏览

java - 使用 Guava 的 ComparisonChain 比较包含罗马数字的字符串

我有一个类实现Comparator<String>,它应该以这样的方式对字符串进行排序,第一个单词是罗马数字的字符串应该在不以罗马数字开头的字符串之前,如果两个字符串都以罗马文字开头,应该有两种情况:

  1. 按罗马数字排序,然后如果相等,则按其余字符串
  2. 按字符串的其余部分排序,如果等于罗马数字

想用Guava的ComparisonChain但是遇到两个问题:

  1. 在 Eclipse 中调试期间,我看不到比较链对象内部的内容(即使在比较链类中)。
  2. comparisonChain.result()在上面的第二个示例中,对于“XI Something”、“III Something”等值,始终返回 0(由于问题 #1,我无法检查流程)(转换为 long 是可以的 - 我检查了值)。

这里有什么问题?我可以使用comparisonChain像上面这样的对象(通过创建变量并.compare在一些 if 中添加 s,比如使用构建器),不是吗?

这段代码:

还有这个:

给出不同的结果 - 第一种情况是可以的,第二个总是 0。所以问题是:如果第二种情况,我可以使用ComparisonChain所示的,还是这种行为是一个错误?

0 投票
1 回答
4254 浏览

java - 我可以使用 Guava 的比较链以特殊方式处理空字段吗?

我有一个具有多个字段的 ComplexObject,我想说:

  • 如果x两者都存在字段,则转到compare比较链中的下一个。
  • 如果两者都为空,则转到compare比较链中的下一个。
  • 如果一个为空而另一个不为空,则将空值放在最后

我不知道该怎么做,因为据我所知

将要

  1. 如果对象都存在且相等,则认为它们相等
  2. 如果它们都为空,则认为对象相等。

有没有办法可以使用番石榴ComparisonChainOrdering类来实现我想要的?或者有没有更好的方法来考虑解决这个问题?

0 投票
2 回答
785 浏览

java - Guava ComparisonChain为什么在第一次比较返回非零结果后不终止

番石榴中的比较链不应该懒惰地评估比较吗?在下面的代码中,NullComparator (apache) 将返回一个非零值,链不应该终止吗?

文档:ComparisonChain 实现停止调用其输入的 compareTo 和 compare 方法,只要其中一个返回非零结果

注意:以上只是一个例子。也许这将是更好的例子

0 投票
1 回答
68 浏览

javascript - Guava 的 ComparisonChain 转换为 JavaScript

我正在将一些代码从 Java 转换为 JavaScript,并且遇到了以下代码:

看起来很公平,因为它将返回匹配比较链的结果对象。

但我不明白的是,在我天真的眼中,这两种方法似乎都在做同样的事情:如果xory属性匹配,则返回。唯一的区别是先检查x属性,即检查的顺序不同。

此外,如果这是真的,那么该Arrays.binarySearch方法将返回ypoints具有相同x属性的元素。我不觉得这是该功能的目的。

所以,我的 JavaScript 翻译将是:

但是这两个都可以简化为return (p1.y === p2.y || p1.x === p2.x) ? p1 : undefined;.

我觉得我肯定误解了它ComparisonChain的工作原理。链条的顺序重要吗?关于如何将其转换为 JavaScript 的指导的奖励积分。