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

时间:2015-04-14 21:07:32

标签: java java-8

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

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

的列表中

2 个答案:

答案 0 :(得分:6)

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

final List<String> keys = userIds.stream()
                                 .map(this::removePrefix)
                                 .collect(toList());

答案 1 :(得分:3)

@assylias的答案很好,但是如果您不担心修改列表(并且允许您通过其ListIterator#set方法修改它),那么一个很好的选择可能是使用{ {1}}:

replaceAll

final List<String> userIds = request.getUserIds(); userIds.replaceAll(this::removePrefix); 在这里工作,因为你的函数是从T到T的函数(在你的情况下T是replaceAll),所以基本上是String,它是{{1} }。

如果你想要应用的映射是从类型T到U,那么获取列表的流并通过UnaryOperator方法进行映射(就像你做的那样)是标准的习惯用法