gpt4 book ai didi

java - 泛型,Guava Ordering.arbitrary()

转载 作者:行者123 更新时间:2023-11-29 06:40:54 27 4
gpt4 key购买 nike

@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,
b) == 0
implies a == 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com