1

以下は、私が扱っている入力の例です。

パラメータとしてString,Doubleを持つlinkedHashMap

NumericMap: { p=20.0, r=5.0, i=2.0}

そしてファイル入力:

p = i * i * r

私が今しなければならないことは、ファイル入力を取得し、それをデータ構造としてプログラムに保存することです。これにより、挿入に基づいて、ファイルからの項目の順序を複製および維持できます。そこから、関連する順序で double をファイル入力に適用できるようにする必要があります。結果は次のようになります。

20 = 2 * 2 * 5

ここから、私は言う必要があります:

If(the file input structure .contains("*"){
Double1 = the double in front of the *
Double2 = the double after the *
Answer1 = Double1 * Double2
}

これまでのところ、ファイル入力をlinkedHashMapにも入れることでこれらすべてを達成することができましたが、linkedHashMapは重複するエントリを許可しません。誰かが multiMap を次のように使用するように提案しました:

Multimap map = ArrayListMultimap.create();
map.put(key, value1);
map.put(key, value2);
List values = map.get(key);

しかし残念ながら、これはエラーを返すだけです。私もarrayListsでこれをやろうとしましたが、明らかにarrayListsは一度調整された順序を維持しません。

上記のすべてを取得するためにファイル入力に使用できるものと、それを行う方法についてのアイデア。

よろしく

4

1 に答える 1

1

独自の複数マップ クラスをコーディングできます。実装の 1 つを次に示します。

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;


public class MultiMap<K, V> {
    Map<K, List<V>> map = new HashMap<K, List<V>>();

    public void put(K key, V value) {
        List<V> values = null;
        if(!map.containsKey(key)) {
            values = new LinkedList<V>();
            map.put(key, values);
        } else {
            values = map.get(key);
        }

        assert(values != null);
        values.add(value);
    }

    public List<V> get(K key) {
        return map.get(key);
    }
}
于 2013-01-22T18:42:07.573 に答える