使用streams / collect在Java 8中生成映射

时间:2016-09-20 18:54:52

标签: java-8

我正在玩Java 8中的地图/流,我没有看到转换以下Java 7代码的简单方法。好像我无法访问方法中的方法。如果我使用.map()作为中间步骤,我将无法访问外部变量(" item")。我错过了什么吗?

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));
}

谢谢!

1 个答案:

答案 0 :(得分:0)

正确的Java 8表达式应为:

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