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;
答案 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
方法进行映射(就像你做的那样)是标准的习惯用法