在Java 8中,我们有Stream <T>类,它奇怪地有一个方法
Iterator<T> iterator()
Run Code Online (Sandbox Code Playgroud)
所以你会期望它实现接口Iterable <T>,这需要完全这个方法,但事实并非如此.
当我想使用foreach循环遍历Stream时,我必须做类似的事情
public static Iterable<T> getIterable(Stream<T> s) {
return new Iterable<T> {
@Override
public Iterator<T> iterator() {
return s.iterator();
}
};
}
for (T element : getIterable(s)) { ... }
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
我需要Iterator<Character>一个String物体.Java中是否有任何可用的功能可以为我提供这个功能,还是我必须编写自己的代码?
是否可以从迭代器创建一个Stream,其中对象序列与通过重复调用迭代器的next()方法生成的对象序列相同?我想到的具体情况涉及TreeSet.descendingIterator()返回的迭代器的使用,但我可以想象其他情况下迭代器,而不是它引用的集合是可用的.
例如,对于TreeSet<T> tset我们可以tset.stream()...在集合的排序顺序中编写和获取该集合中的对象流,但是如果我们希望它们以不同的顺序(例如通过使用可用的顺序)descendingIterator()怎么办?我想象的东西,tset.descendingIterator().stream()...或者stream( tset.descendingIterator() )...,虽然这些形式都不是有效的.