[英]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.