“ java.util.Comparator.compare(String o1,String o2)”方法的工作原理

马达维

谁能解释一下java“ compare”方法如何为输入工作 "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”),它说“比较两个参数的顺序。返回一个负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数。”

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

穆雷尼克

Strings在字典顺序(即它们在字典中的出现顺序)中可比。如果要实现Comparator衣服尺寸的A,则必须自己编写逻辑。例如:

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假设两个字符串都代表有效的衣服尺寸。如果无法做出此假设,则必须添加一些错误处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何实现Comparator.compare(T o1,T o2)方法

为什么Java允许compare(String,String)Comparator方法采用Object类型的参数?

Java 方法引用 String::compareTo 实现 Comparator<String> 是如何工作的?

NoSuchMethodError-没有静态方法比较(java / util / Comparator)

java.util.Comparator实例的命名约定

“java:找不到适合 sort(java.util.ArrayList<Person>,<匿名 java.util.Comparator<Person>>) 的方法”

java.util.Properties与java.util.Map <String,String>

Comparator <String>必须重写超类方法

Scala 中 java.util.Comparator 的通用实现

java.util.Comparator.naturalOrder采用<T扩展Comparable <?超级T >>并返回Comparator <T>-为什么?

Java:找不到适合解析的方法(java.util.List <java.lang.String>)

assertEquals(Object o1,Object o2)是否使用equals方法

返回 java.util.Map 的 java 方法在 openapi 中生成 String 返回而不是 Map

将java.util.Properties转换为HashMap <String,String>

java.util.IllegalFormatConversionException:f!= java.lang.String错误

Java java.util.Map.Entry和Collection.sort(List,Comparator)

java是否提供内置的静态String.Compare方法?

带有键提取器的Optional <T>的比较器,例如java.util.Comparator.comparing

为什么equals在java.util.Comparator中不是必须实现的?

Eclipse的Content Assist不适用于java.util.Comparator

java: 没有为 addAll(java.util.List<java.lang.String>) 找到合适的方法

将DStream [java.util.Date]转换为DStream [String]

将java.util.Date转换为String

将String转换为java.util.Date

java.util.Iterator<String> 到 gzip 数据的 InputStream

预期的数组类型;找到:'java.util.map<java.lang.String,java.lang.String>'

尝试调用虚拟方法 'java.lang.String java.util.HashSet.toString()。获取空指针异常

在Java代码中将scala.collection.Seq <String>转换为java.util.List <String>

java.lang.ClassCastException: java.lang.String 不能转换为 java.util.Map