Guava函数根据对列表中每个项的应用条件将项添加到结果集合中

时间:2016-10-20 06:58:57

标签: java functional-programming guava

我正在尝试通过查看现有集合来创建一组项目,并在满足特定条件时将每个项目添加到结果列表中。我想知道是否有更有效的方法来使用一些Google Guava库来完成这项任务。算法如下

    final List<String> matchingItems = new ArrayList<>();
    for (final String li : getItems()) {
        if (li.length() > 5) {
            matchingItems.add(li);
        }
    }
    return matchingItems;

1 个答案:

答案 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

Java 8使前面的代码更具可读性,并且您不需要包含Guava。

List<String> matchingItems = getItems().stream()
  .filter(s -> s.length() > 5)
  .collect(Collectors.toList());

1:禁止其他byte-code relevant optimizations