0

(メソッドの再定義

public Collection<String> values();

)。

別のマップにマップが含まれているので、次のようになります。

Map<String,Map<String,String>> centralMap

(インターンマップはsubjectGradeMapです)このメソッドを使用したいのですが:

public Collection<String> values()

マップのすべての値を含むコレクションを取得します。私は試した:

Collection<String> returncoll = centralMap.values().values();

しかし、それは機能しませんでした。これも試してみました:

Collection<Map<String,String>> collec = centralMap.values();
Collection<String> returncollection = collec.values(); 

しかし無駄に:-S

その問題はおかげで解決されました!さて、あなたがアイデアを持っているかどうか尋ねたいのですが、Iteratorメソッドをどのように実装すればよいですか?

/**
* Returns an Iterator, that pass through all the entries of the map. If
* something changes in the map, when it is being passed through all its'
* entries by the Iterator, we can't determinate the behaviour that will
* happen..
*
* @return An Iterator that pass through all entries. Every entry will be
*         returned as String-Tripel with its' three Elements row, column
*         and value.
*/
@Override
public Iterator<Entry> iterator() {
return null;
}

アイデアはありますか?

Entryクラスは次のクラスです(TrueStringMap2Dのオブジェクトを作成するために使用するインターフェイスに実装されています。

final class Entry
    {       
       /** First Key. */
        private final String key1;

       /** Second Key. */
        private final String key2;

       /** Value. */
        private final String value;

       /** Ctor for a tripel.
        * @param key1 1st key.
        * @param key2 2nd key.
        * @param value Value.
        */
        public Entry(final String key1, final String key2, final String value)
        {
            this.key1 = key1;
            this.key2 = key2;
            this.value = value;
        }

        public String getFirstKey()
        {
            return key1;
        }

        public String getSecondKey()
        {
            return key2;
        }

        public String getValue()
        {
                return value;
        }

        @Override public boolean equals(final Object anything)
        {
            if(anything == null)
                return false;
            if(getClass() != anything.getClass())
                return false;
            final Entry that = (Entry)anything;
            return Objects.equals(getFirstKey(), that.getFirstKey())
                   && Objects.equals(getSecondKey(), that.getSecondKey())
                   && Objects.equals(getValue(), that.getValue());
        }

        // CHECKSTYLE- Magic Number
        @Override public int hashCode()
        {
            int hash = 7;
            hash = 17 * hash + Objects.hashCode(getFirstKey());
            hash = 17 * hash + Objects.hashCode(getSecondKey());
            hash = 17 * hash + Objects.hashCode(getValue());
            return hash;
        }
        // CHECKSTYLE+ Magic Number

        @Override public String toString()
        {
            return String.format("(%s, %s, %s)", getFirstKey(), getSecondKey(), getValue());
            }

    }

ご協力ありがとうございました!

4

2 に答える 2

1

centralMap.values()Collection を返します。 Collection には がありませんvalues()centralMap.values()基本的にマップのリストを返します。したがって、これらの各マップを評価するには、次の手順を繰り返す必要があります。

for (Map map : cetralMap.values()) {
    Collection values = map.values();
    // do something with your values here
}

に含まれるすべてのマップからすべての値のコレクションを作成するにはcentralMap:

List myGrandList = new ArrayList();
for (Map map : centralMap.values()) {
    myGrandList.addAll(map.values());
}
return myGrandList;
于 2012-05-03T11:16:58.947 に答える
0

( ApacheによるCommons-CollectionsMultiKeyMapから)使用できます:

MultiKeyMap<String, String> map;
map.put("Key1", "Key2", "Value");
map.put("Key1", "Key3", "Value2");

for (Entry<MultiKey<String>, String> entry : map.entrySet()) {
    // TODO something
}

次の 2 つのバージョンがあります。

于 2012-05-03T11:27:58.053 に答える