这是Java 8中lambdas的正确用法吗?

Pho*_*nix 1 java java-8

final List<String> userIds = request.getUserIds();
final List<String> keys = userIds.stream().map(p -> { 
    return removePrefix(p); 
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

基本上,列表中的每个键都userIds包含一个前缀"_user",我想为每个键删除它.所以,我removePrefix在列表的每个项目上调用该函数,并将该结果存储在另一个名为"keys"的列表中

ass*_*ias 7

是的,它很好,虽然你可以通过方法引用和静态导入使它更短,更易读:

final List<String> keys = userIds.stream()
                                 .map(this::removePrefix)
                                 .collect(toList());
Run Code Online (Sandbox Code Playgroud)

  • 没有功能差异 - 但我发现方法参考更具可读性.这显然是品味问题...... (5认同)
  • @NagyVilmos这很容易被验证......以下是关于这个问题的更多内容:http://stackoverflow.com/questions/24487805/lambda-expression-vs-method-reference (2认同)
  • @Nagy Vilmos:不,他们略有不同.方法引用不需要合成方法来保存lambda的代码,而是直接引用目标方法.嗯,在大多数情况下; 有时它需要一个与lambda表达式完全相同的辅助方法,例如对于varargs方法或数组构造函数. (2认同)