/**
* Operator that limit the total number of items emitted through the pipeline
* Shall print
* [1]
* @throws InterruptedException
*/
@Test
public void limitStream() throws InterruptedException {
List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 2, 3)
.stream()
.limit(1)
.collect(toList());
System.out.println(list);
}
12条答案
按热度按时间vd8tlhqk1#
如果您知道集合是一个队列,那么您可以将集合强制转换为一个队列并轻松获得它。
您可以使用几种结构来获取订单,但需要对其进行强制转换。
vjrehmav2#
功能方式:
上面的代码段保留了nullpointerexception和indexoutofboundsexception
lc8prwob3#
在java 8中:
对于旧版本的java,guava iterables中有一个getfirst方法:
cedebl8k4#
你可以这样做:
javadoc for collection针对数组元素的排序给出了以下警告:
如果此集合保证其迭代器返回元素的顺序,则此方法必须以相同的顺序返回元素。
i2byvkas5#
看来这是最好的办法:
好问题。。。一开始,这似乎是对政府的疏忽
Collection
接口。请注意,“first”并不总是返回您放入集合中的第一件东西,并且可能只对有序集合有意义。也许这就是为什么没有
get(item)
呼叫,因为顺序不一定保留。虽然这看起来有点浪费,但可能没有你想象的那么糟糕。这个
Iterator
实际上,它只是将索引信息包含到集合中,而不是整个集合的副本。调用此方法不会示例化Iterator
对象,但这实际上是唯一的开销(不像复制所有元素)。例如,查看
ArrayList<String>.iterator()
方法,我们看到它是ArrayList::Itr
. 这是一个内部类,它只是直接访问列表中的元素,而不是复制它们。一定要检查一下
iterator()
因为它可能是空的或者null
取决于实施情况。6qfn3psc6#
这完全取决于您使用了哪个实现,是arraylist linkedlist,还是set的其他实现。
如果设置了,那么您可以直接获取第一个元素,它们可以在集合上进行技巧循环,创建一个值为1的变量,并在标志值为1时获取值,然后中断该循环。
如果是list的实现,那么通过定义索引号就很容易了。
whitzsjs7#
你可以选一个角色。例如,如果存在一个具有此定义的方法,并且您知道此方法正在返回列表:
在调用它之后,你需要第一个元素,你可以这样做:
xoshrz7s8#
听起来你的收藏品想要列表式的,所以我建议:
ncgqoxb09#
世界上没有“第一个”这样的东西
Collection
因为它是。。好吧,只是一个收藏。从java doc的collection.iterator()方法:
对于元素返回的顺序没有任何保证。。。
所以你不能。
如果使用其他界面(如列表),则可以执行以下操作:
但直接从一个集合这是不可能的。
suzh9iv810#
在Java8中,有许多操作符可以使用,例如limit
rm5edbpk11#
iterables.get(yourc,indexyouwant)
因为真的,如果你用的是收藏,你应该用谷歌收藏。
ru9i0ody12#
Guava提供
onlyElement
Collector
,但仅当希望集合只有一个元素时才使用它。如果您不确定有多少元素,请使用
findFirst
.