我正在尝试使用其中一个参数对VariantOptionData ArrayList进行排序。
这是我的VariantOptionData
public class VariantOptionData implements java.io.Serializable
{
private Collection<VariantOptionQualifierData> variantOptionQualifiers;
private StockData stock;
private NGCPSizeEnum cs2;
}
我想使用cs2参数对此列表进行排序。我这样做..
List<VariantOptionData> allSizes = Converters.convertAll(style.getVariants(), getVariantOptionDataConverter());
Collections.sort(allSizes, new Comparator<VariantOptionData>()
{
@Override
public int compare(final VariantOptionData s1, final VariantOptionData s2)
{
return Integer.parseInt(s1.getCs2().getCode()) < Integer.parseInt(s1.getCs2().getCode()) ? s1.getCs2().getCode() : s2.getCs2().getCode();
}
});
我知道它错了,但我正在尝试这样的事情,但却无法理解Comparators究竟是如何工作的。 cs2
是一个枚举字段,其代码为增量值。我想使用Integer.parseInt(s1.getCs2().getCode())
递增顺序对此列表进行排序。请帮忙
答案 0 :(得分:2)
您必须返回比较器中的最大值,但是,例如减去:
@Override
public int compare(final VariantOptionData s1, final VariantOptionData s2)
{
return Integer.parseInt(s1.getCs2().getCode()) - Integer.parseInt(s2.getCs2().getCode());
}
答案 1 :(得分:1)
如果您查看compare()
的Javadoc,您可以了解它的工作原理:
比较它的两个参数的顺序。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
要遵循此规则,您需要做的只是一个简单的减法:
@Override
public int compare(final VariantOptionData s1, final VariantOptionData s2)
{
return Integer.parseInt(s1.getCs2().getCode()) - Integer.parseInt(s2.getCs2().getCode());
}
答案 2 :(得分:1)
它无效的原因是compare
方法错误。如果两个元素相等,则需要返回以下内容:0
;如果第一个值小于第二个值,则返回负值;如果第一个值大于第二个值,则返回正值。
@Override
public int compare(final VariantOptionData s1, final VariantOptionData s2) {
return Integer.parseInt(s1.getCs2().getCode()) - Integer.parseInt(s2.getCs2().getCode());
}
答案 3 :(得分:0)
好吧,因为我们没有代码的某些部分,而且我们也没有堆栈跟踪,所以我会尽力帮助你。
您的代码看起来不错,您只需要在compare
方法中返回一个数字,我就可以看到您需要VariantOptionData
中cs2属性的getter方法,它必须有一个“代码“属性也是。
Comparator
是一个接口,这就是为什么你在实现比较方法时实现它,我们称之为“匿名类”。 Collections.sort
会根据您在compare
方法中实施的规则对其进行排序。