[英]Return Map.Entry in Java
这可能是一个愚蠢的问题,但是如何在Java中返回Map.Entry对?
给定类似的方法:
public Map.Value<K,V> next(){
return ???
}
如何建立并返回地图值? 这是在我为哈希映射实现的迭代器内部。 我没有任何问题可以获取要返回的值,但是Java不允许我实例化Map.Entry对象,除非我实现了所有抽象方法,即使那样也无法正常工作。 我是否需要为Map.Entry构建一个构造函数,该构造函数可以传递我提取的K,V值?
任何帮助/指导非常感谢
更新
我正在尝试为自定义HashMap实现迭代器,并且需要实现next()方法-我的代码结构为:
@Override
public Iterator<Map.Entry<K, V>> iterator() {
return new Iterator<Map.Entry<K, V>>(){
public boolean hasNext(){
return false;
}
public Map.Entry<K,V> next(){
Map.Entry<K, V> retVal = new Map.Entry<K, V>() {
public Map.Entry<K, V>(K key, V val){
}
@Override
public K getKey() {
// TODO Auto-generated method stub
return null;
}
@Override
public V getValue() {
// TODO Auto-generated method stub
return null;
}
@Override
public V setValue(V value) {
// TODO Auto-generated method stub
return null;
}
};
}
return null;
}
public void remove(){
throw new UnsupportedOperationException();
}
};
}
}
我那里有抽象方法,但是我不确定应该如何实现它们。 再次感谢您的帮助
做了一些研究,如果您需要返回Map.Entry值而又不想实现Map.Entry类和方法,则可以通过返回AbstractMap.SimpleEntry来实现。
我设置了一些虚拟代码来显示:
import java.util.HashMap;
import java.util.Map;
public class MapReturn<K,V> extends HashMap<K,V>{
public static void main (String [] args){
}
public Map.Entry<K,V> returnMapValue(K k, V v){
return new java.util.AbstractMap.SimpleEntry<K,V>(k,v);
}
}
显然这没有做任何事情,但是它将返回值注册为有效,这是原始问题
Map.Entry的每个实现都是包私有的,因此不能在其包外部创建。 您应该创建自己的实现java.util.Map.Entry的类并将其返回。 类似于您的匿名实现,但提取到非匿名类。
添加一个带有键和值并实现方法的构造函数,它应该很简单。
我也有这种情况,需要返回Map.Entry。 在这里,我正在遍历地图。就我而言,我需要键和值。
因为我有相同的情况,所以我觉得要发布此内容。 但是我最初尝试了此方法,并且对我有用,后来,我想到了用internet / StackOverflow上的代码验证我的代码。 因此,我想将其发布为该场景/问题的帮助,因为它知道这是一个较晚的答复,但却是一个经过试验和测试的不同答复。
// This is the method which dealt a static Map iteration.
Entry<String, Integer> calculateDaysOfNextMonth(String month, boolean isGivenYearLeap) {
Entry<String, Integer> resultEntry = null;
// monthsMap is a map initialized in a static block.
if (monthsMap.containsKey(givenMonth)) {
for (Entry<String, Integer> entry : monthsMap.entrySet()) {
if(someImportantConditionHere) {
resultEntry = entry;
resultEntry.setValue(resultEntry.getValue() + 1);
} else {
resultEntry = entry;
}
}
}
return resultEntry;
}
// The method invocation, where I collected "Entry<String, Integer> entry" as a result
public static void main(String args[]) {
System.out.println("Next month contains: "+calculateDaysOfNextMonth("JAN", true)+" days !");
}
PS:如果我错了,请纠正我。 我乐意去学。 谢谢:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.