在Java中返回Map.Entry

时间:2014-10-27 04:12:53

标签: java hashmap hashset

这可能是一个愚蠢的问题,但我如何在java中返回Map.Entry对?

给出一个方法:

public Map.Value<K,V> next(){

  return ???
}

如何构建并返回地图值?这是我为Hash Map实现的迭代器内部。获取我想要返回的值没有问题,但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();
         }


     };
 }

}

我在那里有抽象的方法,但我不确定如何实现它们。再次感谢您的帮助

3 个答案:

答案 0 :(得分:3)

做了一些研究,如果你需要返回一个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);
    }

}

这显然没有做任何事情,但它将返回值注册为有效,这是原始问题

答案 1 :(得分:1)

Map.Entry的每个实现都是package-private,因此无法在其包外创建。您应该创建自己的实现java.util.Map.Entry的类并将其返回。像你的匿名实现,但提取到非匿名类。

添加一个带有键和值并实现方法的构造函数,它应该是直截了当的。

答案 2 :(得分:0)

在这种情况下,我也需要返回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:如果我错了,请纠正我。我乐意去学。谢谢:)

相关问题