【问题标题】:How "java.util.Comparator.compare(String o1, String o2) " method works“java.util.Comparator.compare(String o1, String o2)”方法的工作原理
【发布时间】:2016-05-24 07:04:12
【问题描述】:

谁能解释一下java“比较”方法如何处理输入"XXXXS, XXXS, XXS, XS,S,M, L,XL,XXL,3XL"

如果输入是"3XL,XS,S,M,L,XL,XXL" 输出是"3XL,XS,S,M,L,XL,XXL" 但我想将输出设为"XS,S,M,L,XL,XXL,3XL"

根据 java 文档("https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html") 它说 “比较它的两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个。”

当输入是两个字符串时,它如何比较小于或大于?我认为输出不是基于字母顺序,因为“3XL,XS,S,M,L,XL,XXL”是我得到的输出.

【问题讨论】:

  • 阅读文档。这比发布这个问题要快...如果有什么特别的东西你没有得到在文档中,那么说出来。
  • Comparator 是一个接口。它没有实现任何东西。那是你要做的。你这样做了吗?如果是,请告诉我们你有什么。如果没有,那么您是在要求我们为您实现它,但本网站不是代码编写服务,所以这是题外话。

标签: java compare comparator


【解决方案1】:

Strings 按字典顺序(即它们在字典中出现的顺序)具有可比性。如果您想为衣服尺寸实现Comparator,您必须自己编写逻辑。例如:

public class ClothesSizeComparator implements Comparator<String> {
    private static final List<String> SIZES = 
        Arrays.asList("XS", "S", "M", "L", "XL", "XXL", "3XL");

    @Override
    public int compare(String s1, String s2) {
        int s1pos = SIZES.indexOf(s1);
        int s2pos = SIZES.indexOf(s2);
        return Integer.compare(s1pos, s2pos);
    }
}

注意:Comparator 假定两个字符串都代表有效的衣服尺码。如果不能做出这种假设,则必须添加一些错误处理。

【讨论】:

  • 您好 Mureinik,感谢您提供的信息。我在“hybris”实现中发现了这个问题。他们开发了上述逻辑。但问题在于他们的逻辑错误。他们将“3XL、4XL”视为一个数字并忽略我们指定的正常顺序(“XS”、“S”、“M”、“L”、“XL”、“XXL”、“3XL”)。这就是问题所在。我解决了这个问题,然后它工作正常。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2021-03-02
  • 2016-11-06
  • 2014-01-13
  • 1970-01-01
  • 2011-01-31
  • 2015-06-30
相关资源
最近更新 更多