2017-01-27 11 views
2

私は生成地図8

<1>, << X, 11 >, < Y, 13 >, < Z, 15 >> 
<2>, << X,12 >, < A, 23 >, < L, 41 >> 

の形式でデータを持っている場合は、これを処理するために、どのように使用して

Map < Integer, Map < String, Integer >> 

私は形式で地図の地図を持っています鍵はトンの鍵となる別のマップを生成されたJava 8のラムダと、次の

を生成
<1>, <[11, 13, 15]> 
<2>, <[12, 23, 41]> 

彼は外側の地図であり、値は内側の地図の値のリストです。私は通常の方法でこれを行う方法を知っていますが、私はこれをどのようにJava 8 Lambdaを使って調べています。

+0

ストリームをラムダで使用することを意味しますか?もしそうでなければ、あなたは「普通のやり方」で何をしましたか、それをどのようにラムダに変換することを望みますか? – Zircon

+0

Java-8はラムダを紹介するだけでなく、ストリームとメソッドリファレンスは、この問題を解決するのに役立ちます。 – Darshit

答えて

6

あなたはMap<Integer, List<Integer>>を再作成するCollectors.toMapを使用することができます。このコードの一部で

input.entrySet().stream() 
       .collect(Collectors.toMap(e->e.getKey(), 
              e->new ArrayList(e.getValue().values()))); 

を、我々は値が内側のマップの値のList<Integer>になるようにそれらを変換することによってMap<Integer, List<Integer>>Entry<Integer, Map<String, Integer>>を収集し、キーは同じままです。

hereをテストできます。

+2

'values'は' Collection'を返します。それを 'List'に再収集する必要があります。 –

+0

@ JornVerneeありがとう、私はコードをテストする必要があります。 – Aaron

+0

ありがとうございます。これは私が探していたものです。 –