2016-09-20 6 views
0

私はJava 8でマップ/ストリームを再生していますが、次のJava 7コードを変換するための簡単な方法はありません。メソッド内のメソッドにアクセスできないようです。中間ステップとして.map()を使用すると、外部変数(「item」)へのアクセスが失われます。何か不足していますか?ストリーム/コレクトを使用してJavaでマップを生成する8

private void test(final Collection<SomeObject> items){ 
    // Java 7 
    Map<SomeKey, List<SomeObject>> map = Maps.newHashMap(); 
    for (SomeObject item : items){ 
     SomeKey someKey = item.someMethod().getKey(); 
     map.put(someKey,item); 
    } 
    // Java 8 
    Map<SomeKey, List<SomeObject>> map2 = 
     items.stream().collect(Collectors.groupingBy(item::someMethod::getKey)); 
} 

ありがとうございます!

+3

。正しくないラムダ式 'item - > item.someMethod()。getKey()'を使って、不正なメソッドリファレンス 'item :: someMethod :: getKey'を置き換えてください。 – Holger

+0

@Holgerあなたのコメントで回答を追加しましたが、戻ってそれを追加して、私はそれをupvoteします! – phss

答えて

0

正しいのJava 8の式は次のようになります。私はすべての問題のマッピングステップが表示されていない

Map<SomeKey, List<SomeObject>> map2 = 
     items.stream().collect(Collectors.groupingBy(item -> item.someMethod().getKey())); 
関連する問題