【发布时间】:2017-03-08 08:24:24
【问题描述】:
我有以下一般形式的几个类,其中this.words 是List<String>,每个元素包含一个单词:
public ArrayList<String> wordsInclZ() {
ArrayList<String> results = new ArrayList<>();
this.words.stream()
.filter(word -> word.contains("z"))
.forEach(word -> results.add(word));
return results;
}
我唯一需要更改的是过滤条件,即.filter() 中的表达式。这似乎不是一个可怕的复制粘贴情况,但是我想了解是否可以编写更整洁的代码。
是否有一种简明的方法来概括此功能?我想我基本上是在问我可以以及我应该如何将 lambda 作为处理上述方法其余功能的通用方法的参数传递给.filter()。
【问题讨论】:
-
另外:您可以使用 .collect(Collectors.toList());而不是 forEach。然后返回收集的结果。无需定义空结果列表。(为您的功能)
标签: java lambda java-8 java-stream predicate