gpt4 book ai didi

java - 使用比较器实例化 TreeMap,该比较器应该能够访问所述 TreeMap

转载 作者:行者123 更新时间:2023-11-30 04:26:13 28 4
gpt4 key购买 nike

我正在尝试实例化 TreeMap使用Comparator应该能够访问所述 TreeMap ,即它用于的那个(我猜“”一定正是问题所在......):

final Map<String, Integer> map = new TreeMap<String, Integer>(new Comparator<String>() {

@Override
public int compare(String o1, String o2) {
Integer i = map.get(o1);
// Error: "the local variable map may not have been initialized"
return ...;
}

});

我可以明白为什么会发生这个错误,因为在实例化 Comparator<String> 时,map变量尚未初始化,但有任何解决方案吗?

解决方案是 setComparator the TreeMap implementation中的方法,但其 comparator字段已被声明为最终字段:

final Map<String, Integer> map = new TreeMap<String, Integer>();
Comparator<String> comparator = new Comparator<String>() {

@Override
public int compare(String o1, String o2) {
Integer i = map.get(o1);
return ...;
}

};
// map.setComparator(comparator);

最佳答案

你不能在你的类上实现 Comparator 并将 this 传递给 TreeMap 构造函数,例如:

class MyClass implements Comparator<MyClass> {
private String property;
@Override // java.util.Comparator.compare
public int compare(MyClass o1,
MyClass o2) {
return o1.getProperty().compare(o2.getProperty());
}
@Override // java.util.Comparator.equals
public boolean equals(Object o) {
return this.getProperty().equals(o.getProperty());
}

public String getProperty() {
return this.property;
}

public void setProperty(String myPropertyValue) {
property = myPropertyValue;
}

TreeMap <String, MyClass> myMap = null;

public MyClass() {
myMap = new TreeMap<String, MyClass>(this);
}

如果您需要进一步帮助,请发表评论并提供有关您的具体案例的更多信息。

关于java - 使用比较器实例化 TreeMap,该比较器应该能够访问所述 TreeMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807453/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com