Iterables.transform没有迭代我的List

Lah*_*iru 0 java collections guava

analyticsDatabases的类型 -

private final Iterable<Database> analyticsDatabases;
Run Code Online (Sandbox Code Playgroud)

我在方法中使用下面的代码片段,并且我在analyticsDatabases List中有一个元素.当我做一个for循环时,一切正常,但我很好奇为什么我的Iterables.transform不起作用.

Iterable<Iterable<ObjectId>> finalR = Iterables.transform(analyticsDatabases, new Function<Database, Iterable<ObjectId>>() { 
    @Nullable 
    @Override 
    public Iterable<ObjectId> apply(@Nullable Database database) { 
        if (database != null) { 
            return database.deleteItemsById(filterIds, storableType, writeAckStrategy); 
        } 

        `enter code here`

        return null; 
    } 
});
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 5

的javadoc的Iterables状态

性能说明:除非另有说明,否则此类中生成的所有迭代都是惰性的,这意味着它们的迭代器仅在绝对必要时才推进后台迭代.

换句话说,transform不适用于给定的Function.它返回一个Iterable将应用Functionas请求的元素.

  • @Lahiru对于`transform`,它可能在`next()`上.对于`filter`,它可能在`hasNext()`上. (2认同)