繁体   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