2016-09-20 5 views
0

Я играю с картами/потоками в Java 8, и я не вижу простого способа конвертировать следующий код Java 7. Кажется, я не могу получить доступ к методу внутри метода. Если я использую .map() в качестве промежуточного шага, я теряю доступ к внешней переменной («элемент»). Я что-то упускаю?Использование потоков/сбора для создания карты в 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 :: someMethod :: getKey' с правильным выражением лямбда' item -> item.someMethod(). GetKey() ' – Holger

+0

@Holger Я добавил ответ с вашим комментарием, но не стесняйтесь вернуться и добавить его, и я буду его продвигать! – phss

ответ

0

Правильное выражение Java 8 должно быть:

Map<SomeKey, List<SomeObject>> map2 = 
     items.stream().collect(Collectors.groupingBy(item -> item.someMethod().getKey())); 
Смежные вопросы