- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在查看 Guava 的 FluentIterable 的 javadoc 和网络上的大量示例,他们倾向于将 limit() 放在 filter() 和 transform() 之后,这表明所有元素都在 Iterable 被截断为第一个 N。这是他们页面中的示例。
List<String> results =
FluentIterable.from(database.getClientList())
.filter(activeInLastMonthPredicate)
.transform(Functions.toStringFunction())
.limit(10)
.toList();
这看起来效率很低。我错过了什么吗?为什么会出现这种模式?不应该是下面的吗?
List<String> results =
FluentIterable.from(database.getClientList())
.filter(activeInLastMonthPredicate)
.limit(10)
.transform(Functions.toStringFunction())
.toList();
最佳答案
FluentIterable
(和 Guava 的非流利 Iterables
和 Iterators
)是 lazy , 这意味着
Unless otherwise noted, all of the iterables produced in this class are lazy, which means that their iterators only advance the backing iteration when absolutely necessary.
这可能在 JDK 8 的 Stream
documentation 中有更好的解释:
Streams are lazy; computation on the source data is only performed when the terminal operation is initiated, and source elements are consumed only as needed.
还有Stream#limit(int)
documentation :
Returns a stream consisting of the elements of this stream, truncated to be no longer than maxSize in length.
(强调我的。)
因此,放置 .limit(10)
的位置没有区别 - 在您的两个示例中,最多只会消耗 10 个元素。您可以通过将 Functions.toStringFunction()
更改为您可以检查的内容来检查它在每种情况下最多被调用 10 次。
关于java - FluentIterable : should limit() be called as soon as possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304144/
这是来自 Guava 的 API FluentIterable.of(E[] e) 我希望它像 FluentIterable.of(E... e) ,所以我可以从单个元素构建它。 我错过了什么还是有一
有没有办法创建 FluentIterable 函数链,但延迟绑定(bind)到特定集合? 例如: Function, T> chooseBy(Function transform, KEY compa
FluentIterable 只有一个最终字段——委托(delegate) Iterable。 因此,只要内部 Iterable 实例是线程安全的,它似乎就是线程安全的,但我在文档中的任何地方都找不到
我正在查看 Guava 的 FluentIterable 的 javadoc 和网络上的大量示例,他们倾向于将 limit() 放在 filter() 和 transform() 之后,这表明所有元素
我有一个 String 元素列表,我想使用 FluentIterables.transform 对其进行转换。为了这个例子,我们假设它是: List l = Arrays.asList("a", "b
我正在尝试将 Guava 12.0 的 FluentIterable 与 GWT 2.0.3 一起使用,如下所示: import com.google.common.collect.FluentIte
我经常使用Map我转换和过滤以获得另一个 Map ,但是转换非常冗长,我看到 FluentIterable问题中的类(class)Guava: how to combine filter and tr
两者之间有什么区别(如果有的话) Lists.transform(list, function) 和 FluentIterable.from(list).transform(function).toL
有什么区别吗? MyObject myWantedObj = Iterables.tryFind(myListOfObjects, new Predicate() { public boole
我正在使用 Google Guava 库来执行诸如排序和过滤 java.util.List 之类的任务在 Java EE 7 应用程序中。 下面给出了过滤 java.util.List 的示例基于 C
我是一名优秀的程序员,十分优秀!