我正在尝试通过查看现有集合来创建一组项目,并在满足特定条件时将每个项目添加到结果列表中。我想知道是否有更有效的方法来使用一些Google Guava库来完成这项任务。算法如下
final List<String> matchingItems = new ArrayList<>();
for (final String li : getItems()) {
if (li.length() > 5) {
matchingItems.add(li);
}
}
return matchingItems;
答案 0 :(得分:2)
没有比你的方式 [1] 更有效的方式来编写for-loop。
但您可以使用Guava或Java 8以多种方式重写它。这些稍微效率较低。
您可以使用Guava的FluentIterable
课程。它是为你的用例而制作的。
请注意,您必须创建单独的Predicate
,但您可以随意重复使用它。
Predicate<String> hasLengthGreaterThanFive = new Predicate<String>() {
@Override public boolean apply(String str) {
return str.length() > 5;
}
};
List<String> matchingItems = FluentIterable.from(getItems())
.filter(hasLengthGreaterThanFive)
.toList();
Java 8使前面的代码更具可读性,并且您不需要包含Guava。
List<String> matchingItems = getItems().stream()
.filter(s -> s.length() > 5)
.collect(Collectors.toList());