我正在尝试使用Arrays.sort
函数对char数组进行排序。
我正在使用以下代码:
class Solution {
public String customSortString(String S, String T) {
Map<Character, Integer> poses = new HashMap<>(S.length());
for(int i = 0 ; i < S.length() ; i++){
poses.put(S.charAt(i), i);
}
char[] tmpArr = T.toCharArray();
Arrays.sort(tmpArr , new Comparator<Character>(){
@Override
public int compare(Character c1, Character c2) {
Integer aPos = poses.get(c1);
Integer bPos = poses.get(c2);
if(aPos == null || bPos == null)
return 0;
return Integer.compare(aPos,bPos);
}
});
return new String(tmpArr);
}
}
但是我遇到了这个错误:
Error:(14, 19) java: no suitable method found for sort(char[],<anonymous java.util.Comparator<java.lang.Character>>)
method java.util.Arrays.<T>sort(T[],java.util.Comparator<? super T>) is not applicable
(inference variable T has incompatible bounds
equality constraints: char
upper bounds: java.lang.Character,java.lang.Object)
method java.util.Arrays.<T>sort(T[],int,int,java.util.Comparator<? super T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
我在做什么错? 似乎没有自动取消装箱到角色。我该如何工作?
答案 0 :(得分:1)
公共静态无效排序(T [] a,比较器c)
根据由引起的顺序对指定的对象数组进行排序 指定的比较器。
您不能使用基元,Comparator仅适用于对象。
char
是Java中的原始数据类型,因此您应将tmpArr
更改为:
Character[] tmpArr = new Character[T.length()];
for (int i = 0; i < T.length(); i++) {
tmpArr[i] = new Character(T.charAt(i));
}
答案 1 :(得分:1)
$startvar = 'param\":{this_is_long_string}';
$look4 = 'param\":{';
$changed = str_replace($look4,$look4 . '[',$startvar) . ']';
echo $changed;
这是错误,您不能在比较器中使用谓词。
您需要将其转换为char[] tmpArr = T.toCharArray();
。
您可以使用Apache commons-lang进行以下操作:
Character[]
Here是一些转换的好方法。
答案 2 :(得分:1)
已经存在char []的排序方法,所以
Arrays.sort(tmpArr);
所以完整的流程是
char[] tmpArr = T.toCharArray();
Arrays.sort(tmpArr);
return new String(tmpArr);
答案 3 :(得分:1)
似乎没有自动取消装箱角色。
确切地说,在编译时从原始对象到对象的转换称为装箱。拆箱是相反的方法。
是的,Character/char
提供了自动装箱功能,但不能以这种方式工作。这里的原语/包装器对应物位于数组或列表中:因此此处没有装箱的可能。
可以编译:
char a = Character.valueOf('a'); // compile
Character aa = 'a'; // compile
但这不是:
List<Character> charList = ...;
char[] charArray= ...;
charList = charArray; // doesn't compile
charArray = charList; // doesn't compile
我该如何做?
用特定的char
对Comparator
数组进行排序是不常见的。
因此Arrays
API不提供这种方法也就不足为奇了。
通常,Comparator
和Comparable
实现仅依赖于比较对象的状态来返回结果,而不像示例中那样依赖外部变量。
同样,Arrays
API也没有提供创建Stream
的{{1}}的任何方法,因为流字符也不是很常规的需求。
因此,您没有直接解决问题的内置方法。
在您的情况下,我将依靠char
为原始String的每个字符获取一个Arrays.stream(String.split())
,然后应用排序并以一个连接结尾:
String
这应该是不使用外部库的最直接方法。