2017-06-12 5 views
0

私のプロジェクトでLinkedHashMultimapを使用しています。挿入順序を維持しながら値を平坦化する必要があります。SetMultiMapを平坦化して挿入順序を維持する

SetMultimap<String, Integer> m = LinkedHashMultimap.create(); 
m.put("a", 1); 
m.put("b",2); 
m.put("a",3); 

で例えば私は、次のような出力

a : [1,3] 
b : 2 

を取得しています。しかし、私は

a : 1 
b : 2 
a : 3 

を必要とするか、私は出力が一覧

[a,1,b,2,a,3] 

にする必要がありますPS私はLinkedHashMultimapを使用しています。keyの場合はvaluesと重複したくないので、挿入順序を維持する必要があります。

上記の出力を繰り返し処理できるようにするにはどうすればよいですか?

+0

あなたはLinkedHashMultiMapを拡張することで、ラッパークラスを作成し、[ 'などの挿入順序を保持することにより、あなたは私が平坦化されたバージョンが必要 –

答えて

5

Entriesが返され、挿入された順に反復されるので、Multimapsの利点を失わないように次の操作を行うことができます。

for (Map.Entry<String, Integer> entry : m.entries()) { 
    System.out.println(entry.getKey() + " : " + entry.getValue()); 
} 
1

マップ内のリストを使用して、同じキーの複数の値を格納することができます。

public class Test { 

    public static void main(final String[] args) { 
     LinkedList<Values> list = new LinkedList<Values>(); 
     list.add(new Values("a", 1)); 
     list.add(new Values("b", 2)); 
     list.add(new Values("a", 3)); 
     System.out.println(list); 
    } 
} 

class Values { 
    String key; 
    int value; 

    public Values(final String key, final int value) { 
     super(); 
     this.key = key; 
     this.value = value; 
    } 

    @Override 
    public String toString() { 
     return key + "," + value; 
    } 
} 

このプログラムの出力は次のようになります。

[a,1, b,2, a,3] 

私はあなたがそれをしたいか、これがあると思います。

+0

もそれを望んでまったく同じ順序で追跡し、その分野の一つとして配列を追加することができますa、1、b、2、a、3] '@Krishna Kuntala ..私があなたの出力を平らにしたら、私は注文を得ることはありません。右! – user2731629

+1

@ user2731629私は更新された答えがリンクされたハッシュマップの代わりにオブジェクトとリンクリストの使用に関するあなたの問題を解決することを願っています。 –

+0

申し訳ありません!! .. Duplicatesが含まれています。重複した値は必要ありません。 'a、3'をもう一度追加すると、それを追加すべきではありません。なぜ私はSetMuliMapを使用していたのですか? – user2731629

関連する問題