获取可迭代对象的前 n 个元素

Get first n elements of an iterable

我有一个 Iterable<T>。这个可迭代对象包含 m 个元素。我想创建一个包含 n 元素的 Iterable<T>,其中 n = min(m, N) 用于用户输入的某些 N。这些元素应该是给定可迭代对象的前 n 个元素。

理想情况下,返回的 Iterable 将由原始 Iterable 而不是元素的副本支持。

是否有执行此操作的魔法函数,也许在 Guava 中?

如果我没理解错的话,你可以用Iterables#limit(Iterable, int):

Creates an iterable with the first limitSize elements of the given iterable. If the original iterable does not contain that many elements, the returned iterable will have the same behavior as the original iterable. The returned iterable's iterator supports remove() if the original iterator does.

示例:

Iterable<Integer> limitedToTwoElements = Iterables.limit(someIterable, 2);
// wrapped iterable will have size 2, obviously
// ...unless original iterable is smaller, then it'll have size equal to original