【发布时间】:2020-10-25 00:54:00
【问题描述】:
我正在尝试使用不区分大小写的比较器执行二进制搜索,但无论我尝试什么都会不断出错...
试用 1:
Arrays.binarySearch(arr, "text", String::compareToIgnoreCase);
来源:https://stackoverflow.com/a/30191946/900394
这给出了一个错误:
语言级别“7”不支持方法引用
假设我想使用 Java 7,我尝试了以下其他方法:
试用 2:
Comparator<String> caseInsensitiveComparator = new Comparator<String>() {
@Override
public int compare(String s, String t1) {
return s.compareToIgnoreCase(t1);
}
};
Arrays.binarySearch(arr, "text", caseInsensitiveComparator);
来源:https://stackoverflow.com/a/14154185/900394
错误:
必需类型:比较器
提供:比较器
请注意,此方法适用于对列表进行排序(即此比较器适用于Collections.sort())
试用 3:
Arrays.binarySearch(arr, "text", String.CASE_INSENSITIVE_ORDER);
来源:https://stackoverflow.com/a/17491652/900394
错误:
必需类型:比较器
提供:比较器
请注意,此方法也适用于Collections.sort()
试验 4:
构建一个实现Comparator<String>的类:
public class CaseInsensitiveComparatorClass implements Comparator<String> {
@Override
public int compare(String s, String t1) {
return s.compareToIgnoreCase(t1);
}
}
Arrays.binarySearch(arr, "text", new CaseInsensitiveComparatorClass ());
来源:https://stackoverflow.com/a/30191797/900394
错误:
必需类型:比较器
提供:CaseInsensitiveComparatorClass
请注意,此方法也适用于 Collections.sort()
您能否提供一种可行的方法,或者指出我做错了什么?
编辑:
这是arr的声明:
private List<String> lst;
所以它实际上是一个列表,我在方法调用时将其转换为数组:
Arrays.binarySearch(lst.toArray(),...
【问题讨论】:
-
我猜
arr的类型有问题。请发布您如何初始化它 -
如果
arr声明为String [] arr,你应该没有问题 -
@VasiliySarzhynskyi,它实际上是一个列表,我将其转换为一个数组。请参阅编辑
-
您应该将代码更改为以下内容:
Arrays.binarySearch(lst.toArray(new String[0]),... -
@VasiliySarzhynskyi,是的。你说得对。谢谢,我选择了你的答案。顺便说一句,我看到由于某种原因,所有答案都被否决了。我没有否决任何答案...不知道发生了什么...
标签: java comparator