如何检查列表<String>的排序是否与番石榴中的特定模式匹配?



我试图检查List<String>元素是否按其元素的第一个字符排序以匹配此格式(空白、数字、字母(空白实际上是一个8个空格的字符串" "

我尝试了这个,但没有效果

Ordering.from(String.CASE_INSENSITIVE_ORDER).isOrdered(abc);

我想用Guava做这个,我用三个for循环成功地做到了。

由于您没有使用字符串的自然排序,因此您必须实现自己的比较器。这是Comparator的官方文档。根据文件,比较器接口为:

一个比较函数,它对一些对象集合强制执行总排序。

它的比较函数将返回:

作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数。

您可以使用Ordered类的方法from()。此方法将一个自定义比较器作为参数,该比较器将执行比较字符串的任务:

public boolean isOrdered(List<String> list) {
return Ordering.from(getComparator()).isOrdered(list);
}

getComparator()函数将返回此Comparator:

public Comparator<String> getComparator() {
return new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
char firstChar1 = o1.charAt(0);
char firstChar2 = o2.charAt(0);
if (o1.startsWith("        ")) {
return o2.startsWith("        ") ? 0 : -1;
} else if (o2.startsWith("        ")) {
return o2.startsWith("        ") ? 0 : 1;
} else if (firstChar1 == firstChar2) {
return 0;
} else {
return firstChar1 - firstChar2 < 0 ? -1 : 1;
}
}
};
}

我已经测试了以上代码:

public void myMethod() {
List<String> ordered = Arrays.asList("        hello", "1hello", "2hello", "8hello", "hello", "zhello");
List<String> unordered = Arrays.asList("        hello", "1hello", "8hello", "2hello", "hello", "zhello");
System.out.println(isOrdered(ordered));
System.out.println(isOrdered(unordered));
}

控制台上的输出为:

true
false

最新更新