作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
@SuppressWarnings("unchecked")
public static final Ordering<EmailTemplate> ARBITRARY_ORDERING = (Ordering)Ordering.arbitrary();
public static final Ordering<EmailTemplate> ORDER_BY_NAME = Ordering.natural().nullsFirst().onResultOf(GET_NAME);
public static final Ordering<EmailTemplate> ORDER_BY_NAME_SAFE = Ordering.allEqual().nullsFirst()
.compound(ORDER_BY_NAME)
.compound(ARBITRARY_ORDERING);
这是用于订购 EmailTemplate 的代码。如果我有一个 EmailTemplate 列表,我希望列表的空元素出现在开头,然后是具有空名称的元素,然后是自然名称顺序,如果它们具有相同的名称,则为任意顺序。
这是我应该做的吗?我认为通过“allEqual”启动比较器似乎很奇怪......
我还想知道处理 Ordering.arbitrary() 的最佳方法是什么,因为它是一个返回 Ordering 的静态方法。有什么优雅的使用方法吗?我真的不喜欢这种无用的,带有警告的行:
@SuppressWarnings("unchecked")
public static final Ordering<EmailTemplate> ARBITRARY_ORDERING = (Ordering)Ordering.arbitrary();
顺便说一下,文档说:
Returns an arbitrary ordering over all objects, for which
compare(a,
implies
b) == 0a == b
(identity equality). There is no meaning whatsoever to the order imposed, but it is constant for the life of the VM.
这是否意味着与此 Ordering 进行比较的我的对象将永远不会被垃圾回收?
最佳答案
关于第二个问题:没有。 Guava 使用对象的身份哈希码对它们进行任意排序。
关于第一个问题:我会使用比较链按名称排序,然后按任意顺序排序:
private class ByNameThenArbitrary implements Comparator<EmailTemplate> {
@Override
public int compare(EmailTemplate e1, EmailTemplate e2) {
return ComparisonChain.start()
.compare(e1.getName(), e2.getName(), Ordering.natural().nullsFirst(),
.compare(e1, e2, Ordering.arbitrary())
.result();
}
}
然后我将创建真正的排序以首先对具有空值的模板进行排序:
private static final Ordering<EmailTemplate> ORDER =
Ordering.fromComparator(new ByNameThenArbitrary()).nullsFirst();
虽然没有测试。
关于java - 泛型,Guava Ordering.arbitrary(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12316239/
我是一名优秀的程序员,十分优秀!