2014-10-27 2 views
1

Это, вероятно, немой вопрос, но как мне вернуть пару Map.Entry в java?Возврат Map.Entry в Java

Учитывая метод, как:

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

    return ??? 
} 

Как построить и вернуть значение карты? Это внутри итератора, который я реализую для Hash-карты. У меня нет проблем с получением значений, которые я хочу вернуть, но java не позволяет мне создавать экземпляр объекта Map.Entry, если я не реализую все абстрактные методы, и даже тогда он не работает. Мне нужно построить конструктор для Map.Entry, которому можно передать значения K, V, которые я вытягиваю?

Любая помощь/руководство высоко оценило

UPDATE

Я пытаюсь реализовать итератор для пользовательских HashMap, и необходимо реализовать метод следующего() - структура моего кода:

@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(); 
     } 


    }; 
} 

} 

У меня есть абстрактные методы, но я не уверен, как я должен их реализовывать. Еще раз спасибо за помощь

+1

Вы сказали, что сами , вы должны реализовать все методы интерфейса Map.Entry. Без вашего кода мы не можем помочь. – Afforess

+0

Просьба уточнить немного больше о том, что вы точно хотите сделать. –

+0

Я пытаюсь реализовать итератор для многозначной хэш-карты, но, я думаю, мой вопрос более общий: как мне вернуть пару ключ-значение из карты ... или я приближаюсь к реализации итератор не так? –

ответ

0

Проведено некоторое исследование, и если вам нужно вернуть значение 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

Каждая реализация Map.Entry является закрытой для пакета, поэтому ее нельзя создать за пределами ее пакета. Вы должны создать свой собственный класс, реализующий java.util.Map.Entry, и верните его. Что-то вроде вашей анонимной реализации, но извлечено в не анонимный класс.

Добавить конструктор, который берет ключ и значение и реализует методы, он должен быть простым.