是否可以从迭代器创建一个流,其中对象的序列与通过反复调用迭代器的next()方法生成的序列相同?我所考虑的具体情况涉及到Treeset.desceningIterator()返回的迭代器的使用,但是我可以想象在其他情况下,迭代器是可用的,而不是它所引用的集合。
例如,对于treeset
,我们可以编写tset.stream()...
并按照该集合的排序顺序获取该集合中的对象流,但是如果我们希望它们按照不同的顺序,比如通过使用desceningiterator()
获得的顺序呢?我想象的是tset.desceningiterator().stream()...
或stream(tset.desceningiterator()...
,尽管这两种形式都不有效。
static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false);
}
static <T> Stream<T> iteratorToInfiniteStream(final Iterator<T> iterator) {
return Stream.generate(iterator::next);
}
问题内容: 是否可以从迭代器创建一个Stream,其中对象的序列与通过重复调用迭代器的next()方法生成的对象的序列相同?我正在考虑的特定情况涉及TreeSet.descendingIterator()返回的迭代器的使用,但是我可以想象在其他情况下可以使用迭代器而不是它引用的集合。 例如,对于a,我们可以按照集合的排序顺序来编写并获取该集合中的对象流,但是如果我们希望它们以不同的顺序(例如,使用
看看我制作的以下类: 以及它在以下方面的用法: 如果我使用,可能令人惊讶的是,我将永远得不到无限流。 相反,代码将在底层方法中创建时永远循环。 到目前为止,这是纯理论上的,但如果我想首先跳过无限流中的前x个数字,然后用最后的y个数字来限制它,我可以明确地理解它的必要性,如下所示: 代码不会返回一个结果,应该怎么做呢?
问题内容: 尽管有一些阅读,但我遇到了一些我仍难以理解的代码。调用了一个方法,该方法需要两个参数,其中一个是Runnable。尽管有一个lambda,但没有传递Runnable对象。 例如: 所以我的问题是,你能解释一下如何从lambda创建一个Runnable吗,也请有人解释一下语法 () -> {}。具体来说,()括号是什么意思? 谢谢。 问题答案: Lambda可以在需要功能接口的任何地方使
我天真地试图这样做: 要创建迭代器,我可以使用闭包轻松地发送到任务。 但是,它会产生可怕的寿命不匹配错误: 我不明白这个错误。 闭包应采用生命周期为“a”的参数,即结构的生命周期。 国家为结构所有,因此其生命周期为“a”。 使用下一步。召唤(( 所以这里的不匹配是下一个()中的自我终生和“呼叫中的a”之间的不匹配...但我不明白为什么它不是“a”。 修复上述代码的正确方法是什么? 有没有更好的方法
我最近开始检查新的Java8特性。 我遇到过这个迭代器-它对集合进行迭代。 比如,我希望它从第2个值开始,然后迭代到第2个最后一个值。或者类似的东西--或者其他元素。 我要怎么做?