我需要在Python的切片表示法上有一个很好的解释(引用是一个加号).
对我来说,这种符号需要一点点提升.
它看起来非常强大,但我还没有完全了解它.
有方法isiterable
吗?到目前为止我找到的唯一解决方案是打电话
hasattr(myObj, '__iter__')
Run Code Online (Sandbox Code Playgroud)
但我不确定这是多么万无一失.
Python中"iterable","iterator"和"iteration"的最基本定义是什么?
我已阅读多个定义,但我无法确定其确切含义,因为它仍然不会沉入其中.
有人可以帮助我解释外行人的3个定义吗?
我有一个返回的界面java.lang.Iterable<T>
.
我想使用Java 8 Stream API来操纵该结果.
但是Iterable不能"流".
知道如何将Iterable用作Stream而不将其转换为List吗?
如果我有一个收藏品,例如Collection<String> strs
,我怎样才能获得第一件商品?我可以打电话给Iterator
第一个next()
,然后扔掉它Iterator
.有没有浪费的方法吗?
在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)
我在这里错过了什么吗?
我是Java新手,我真的很困惑iterator和iterable.任何人都可以向我解释并举一些例子吗?
为什么Iterator
界面没有扩展Iterable
?
该iterator()
方法可以简单地返回this
.
它是故意还是只是对Java设计师的监督?
能够使用像这样的迭代器的for-each循环会很方便:
for(Object o : someContainer.listSomeObjects()) {
....
}
Run Code Online (Sandbox Code Playgroud)
where listSomeObjects()
返回一个迭代器.
将一个可迭代的所有项添加到现有的"一种明显的方法"是set
什么?
我有一个基元数组,例如int,int [] foo.它可能是一个小型的,或不是.
int foo[] = {1,2,3,4,5,6,7,8,9,0};
Run Code Online (Sandbox Code Playgroud)
从中创建一个最好的方法是Iterable<Integer>
什么?
Iterable<Integer> fooBar = convert(foo);
Run Code Online (Sandbox Code Playgroud)
笔记:
请不要回答使用循环(除非你可以很好地解释编译器如何对它们做一些聪明的事情?)
另请注意
int a[] = {1,2,3};
List<Integer> l = Arrays.asList(a);
Run Code Online (Sandbox Code Playgroud)
甚至不会编译
Type mismatch: cannot convert from List<int[]> to List<Integer>
Run Code Online (Sandbox Code Playgroud)
还要检查 为什么数组不能分配给Iterable? 在回答之前.
此外,如果你使用一些库(例如,番石榴),请解释为什么这是最好的.(因为它来自谷歌不是一个完整的答案:P)
最后,由于似乎有关于此的功课,避免发布家庭作业代码.
iterable ×10
java ×6
python ×4
iterator ×3
java-8 ×2
java-stream ×2
arrays ×1
collections ×1
conventions ×1
iteration ×1
list ×1
set ×1
slice ×1
terminology ×1