在Java 8中,Stream
该类没有任何方法来包装Iterable
.
相反,我Spliterator
从这里Iterable
获得了,然后Stream
从StreamSupport
这样获得一个:
boolean parallel = true;
StreamSupport.stream(spliterator(), parallel)
.filter(Row::isEmpty)
.collect(Collectors.toList())
.forEach(this::deleteRow);
Run Code Online (Sandbox Code Playgroud)
是否有产生的一些其他的方式Stream
上的操作Iterable
,我很想念?
我有Book
和BookList
课.BookList
是这样的:
public class BookList
{
private final List<Book> bList = new ArrayList<Book>();
public int size() { return bList.size(); }
public boolean isEmpty() { ... }
public boolean contains(Book b) { ... }
public boolean add(Book b) { ... }
public boolean remove(Book b) { .. }
public void clear() { ... }
public Object get(int index) { ... }
}
Run Code Online (Sandbox Code Playgroud)
在我的主要课程中,我想在每个循环中打印书籍的标题:
for(Book b : bList)
{
b.print();
}
Run Code Online (Sandbox Code Playgroud)
Eclipse说:
只能遍历数组或java.lang.Iterable的实例
我怎样才能使这个工作?
是否有一种好的,简洁的/内置的方式来查看迭代中的所有值是否为零?现在我正在使用all()
一个小列表理解,但(对我来说)似乎应该有一个更具表现力的方法.我认为这有点等同memcmp()
于C.
values = (0, 0, 0, 0, 0)
# Test if all items in values tuple are zero
if all([ v == 0 for v in values ]) :
print 'indeed they are'
Run Code Online (Sandbox Code Playgroud)
我希望内置函数可以执行以下操作:
def allcmp(iter, value) :
for item in iter :
if item != value :
return False
return True
Run Code Online (Sandbox Code Playgroud)
这个函数是否存在于python中,我只是盲目的,或者我应该坚持使用我的原始版本?
我不是说这allcmp()
是解决方案.这是我认为可能更有意义的一个例子.这不是我建议Python的新内置插件的地方.
在我看来,all()
这不是那么有意义.它没有表达"所有"正在检查的内容.你可以假设它all()
采用了一个可迭代的,但它没有表达函数正在寻找的东西(一个可迭代的bool
s测试所有它们True
).我要求的是像 my allcmp()
这样的函数,它有两个参数:一个可迭代的和一个比较值.我在问是否有内置函数可以执行与我编写的类似的操作allcmp()
. …
我发现,在Python都collections.Iterable
和typing.Iterable
在类型注释,并检查对象是否是迭代的,即可以使用,无论是isinstance(obj, collections.Iterable)
和isinstance(obj, typing.Iterable)
作品。我的问题是,它们之间有什么区别?在哪些情况下更喜欢哪一个?
有没有办法检查任意变量类型是否可迭代?
那么要检查它是否有索引元素,或者我可以实际循环它的孩子?(例如使用foreach?)
是否可以为此创建通用模板?
我在搜索时找到了其他编程语言的技巧.然而,仍然必须找到如何在C++中做到这一点.
Stream
继承一个iterator()方法来生成一个Iterator
.
例如,给定这个字符串:
String input = "this\n" +
"that\n" +
"the_other";
Run Code Online (Sandbox Code Playgroud)
...我需要将字符串的这些部分作为 anIterable
传递给特定的库。调用input.lines()
产生一个Stream
. 所以如果我能把它Stream
变成Iterable
它的一个元素,我会很高兴的。
可能重复:
在Python中,如何确定对象是否可迭代?
如何检查Python对象是否支持迭代,又称迭代对象(参见定义)
理想情况下,我希望函数类似于isiterable(p_object)
返回True或False(建模后isinstance(p_object, type)
).
在包装(内部)迭代器时,通常必须将__iter__
方法重新路由到底层的iterable.请考虑以下示例:
class FancyNewClass(collections.Iterable):
def __init__(self):
self._internal_iterable = [1,2,3,4,5]
# ...
# variant A
def __iter__(self):
return iter(self._internal_iterable)
# variant B
def __iter__(self):
yield from self._internal_iterable
Run Code Online (Sandbox Code Playgroud)
变体A和B之间是否有任何显着差异?Variant A返回iter()
已从内部iterable中查询过的迭代器对象.变量B返回一个生成器对象,该对象返回内部可迭代的值.出于某种原因,是其中一种还是其他的?在collections.abc
该yield from
版本中使用.该return iter()
变种是,我已经使用到现在的格局.
我有一个难题,这让我思考是否有任何标准的java类在Iterable<T>
没有实现的情况下实现Collection<T>
.我正在实现一个接口,它要求我定义一个接受一个的方法Iterable<T>
,但我用来支持这个方法的对象需要一个Collection<T>
.
这让我做了一些真正的kludgy感觉代码,在编译时会给出一些未经检查的警告.
public ImmutableMap<Integer, Optional<Site>> loadAll(
Iterable<? extends Integer> keys
) throws Exception {
Collection<Integer> _keys;
if (keys instanceof Collection) {
_keys = (Collection<Integer>) keys;
} else {
_keys = Lists.newArrayList(keys);
}
final List<Site> sitesById = siteDBDao.getSitesById(_keys);
// snip: convert the list to a map
Run Code Online (Sandbox Code Playgroud)
更改生成的集合以使用更通用的Collection<? extends Integer>
类型不会消除该行的未经检查的警告.此外,我无法更改方法签名以接受Collection
而不是Iterable
因为它然后它不再覆盖超级方法,并且在需要时不会被调用.
目前似乎没有被周围的方式该铸造或拷贝的问题:其他问题都得到了一个在别处问这里,似乎深深扎根于Java的泛型和类型擦除系统.但我要问的是,是否有任何可以实现的类Iterable<T>
还没有实现Collection<T>
?我已经浏览了Iterable
JavaDoc,当然我希望传递给我的界面的所有内容实际上都是一个集合.我想使用一个在野外预编写的类,因为它似乎更有可能实际作为参数传递,并使单元测试更有价值.
由于我正在写的一些单元测试,我确定我编写的演员或复制位与我在项目中使用它的类型一起工作.但我想编写一个单元测试的一些输入端,是一个可迭代但不是一个集合,到目前为止,所有我已经能够拿出正在实施一个虚拟的测试类实现自己.
好奇的是,我正在实现的方法是Guava CacheLoader<K, V>.loadAll(Iterable<? …
我正在寻找一种有效的方法,将一个系列转换为其索引的元组及其值.
s = pd.Series([1, 2, 3], ['a', 'b', 'c'])
Run Code Online (Sandbox Code Playgroud)
我想要一个数组,列表,系列,一些可迭代:
[(1, 'a'), (2, 'b'), (3, 'c')]
Run Code Online (Sandbox Code Playgroud) iterable ×10
python ×5
java ×4
java-stream ×2
annotations ×1
arrays ×1
c++ ×1
collections ×1
foreach ×1
generics ×1
isinstance ×1
java-8 ×1
pandas ×1
python-3.x ×1
series ×1
spliterator ×1
types ×1
yield-from ×1