2016-09-20 34 views
0

我正在玩Java8中的地圖/流,我沒有看到轉換以下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

我看不出有任何問題映射步驟。用正確的lambda表達式'item - > item.someMethod().getKey()' – Holger

+0

@Holger將錯誤的方法引用'item :: someMethod :: getKey'替換爲您的評論的答案,但感覺自由回來並添加它,我會upvote它! – phss

回答

0

正確的Java 8的表達應該是:

Map<SomeKey, List<SomeObject>> map2 = 
     items.stream().collect(Collectors.groupingBy(item -> item.someMethod().getKey()));