繁体   English   中英

Java 8中lambda的这种用法是否正确?

[英]Is this correct usage of lambdas in Java 8?

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

基本上,在列表中每个键userIds包含一个前缀“_user”,我想删除每一个关键。 因此,我在列表的每个项目上调用removePrefix函数,并将结果存储在另一个称为“键”的列表中

是的,这很好,尽管您可以使用方法引用和静态导入使它更短并且更易读:

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

@assylias的答案很好,但是如果您不担心就地修改列表(并且可以通过ListIterator#set方法修改列表),那么一个很好的选择是使用replaceAll

final List<String> userIds = request.getUserIds();
userIds.replaceAll(this::removePrefix);

replaceAll在这里可以工作,因为您的函数是从T到T的函数(在您的情况下,T是String ),因此基本上是UnaryOperator ,它是Function<T,T>

如果您想应用的映射是从T到U,那么获取列表的流并通过Stream#map方法(就像您所做的那样)进行Stream#map是标准的习惯用法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM