Guava {I 44}中Iterables.tryFind与FluentIterable.firstMatch的区别

时间:2015-05-13 22:51:04

标签: java guava

是否有任何区别?

MyObject myWantedObj = Iterables.tryFind(myListOfObjects, new Predicate<MyObject>() {
    public boolean apply(MyObject myObj) {
        return myObj.getSomeAttribute().equals(someFinalVariable);
    }
}).orNull();

MyObject myWantedObj = FluentIterable.from(myListOfObjects).firstMatch(new Predicate<MyObject>() {
    public boolean apply(MyObject myObj) {
        return myObj.getSomeAttribute().equals(someFinalVariable);
    }
}).orNull();

Iterables.tryFind FluentIterable.firstMatch Javadoc 等于:

  

返回一个Optional,其中包含iterable中第一个满足给定谓词的元素(如果存在这样的元素)。

我错过了什么?

1 个答案:

答案 0 :(得分:9)

Iterables.tryFind()提前约会FluentIterable.firstMatch()。如果您只是进行单一操作(如您的示例所示),那么您使用哪种操作并不重要。如果我们先创建Iterables(后见之明是20/20),我们可能永远不会创建FluentIterable类。

当您将多个功能类型的步骤链接在一起时,FluentIterable的力量就会出现。例如:

   FluentIterable
       .from(database.getClientList())
       .filter(activeInLastMonth())
       .transform(Functions.toStringFunction())
       .limit(10)
       .toList();