簡體   English   中英

用Java返回Map.Entry

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM