问题标签 [iterable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3223 浏览

java - 过滤泛型类型列表

可以使用 guava 轻松过滤列表或 Iterables filter(Iterable<?> unfiltered, Class<T> type)。此操作执行两个任务:过滤列表并将其转换为给定类型 T 的序列。

然而,我经常会Iterables<Something<?>> 得到Iterables<Something<T>>一些专门的 T的子序列。

很明显,由于类型擦除,Guava 无法开箱即用地解决这个问题:Something<T>不提供有关其 T 的任何直接信息。

可以说我有类似的东西S<? extends Number>。如果我能够定义一些谓词来告诉我是否S<?>可以转换为S<Double>我可以将其用作文件管理器:

和:

这将执行过滤任务,但错过了转换步骤。如果我认为我的谓词效果很好,我什至可能会考虑强制转换:

但这暴露了一些丑陋的演员阵容。

作为替代方案,我可以提供一个Function<S<?>, S<Double>>来执行演员表。然而,与之相反,Class.cast()它不应该抛出 aClassCastException而只是null在元素不能被强制转换(或转换)时返回。这样可以在没有任何显式转换的情况下转换序列:

但是该列表并没有真正过滤:相反,它仍然包含每个无法转换或强制转换为的元素的空对象S<Double>。但这可以通过额外的过滤步骤轻松解决,例如:

第二个解决方案对我来说似乎更聪明。要定义的Function对象可以执行强制转换(隐藏未经检查的操作),也可以S<T>在必要时真正创建一些新对象。

剩下的问题是:有没有更聪明的方法可以一步完成必要的转换和过滤?我可以简单地定义一些实用函数,例如:

其中第二个功能是第一个功能的捷径,带有Predicates.notNull();

但也值得拥有第一个功能,因为谓词不是必需的Predicates.notNull()

想象一个Iterable<Iterable<? extends Number>>. 转换器函数Function<Iterable<? extends Number>, Iterable<Double>>可以简单地返回一个可能为空的过滤序列,而不是返回 null。附加过滤器最终可能会使用Iterables.isEmpty().

0 投票
2 回答
11422 浏览

python - Python:检查对象是否不是“数组类型”

我正在寻找一种方法来测试一个对象是否不是“list-ish”类型,即 - 不仅该对象不可迭代(例如 - 您还可以在字符串上运行iter,或者在一个简单的实现iter的对象)但该对象不在列表族中。我将“ list ”系列定义为 list/tuple/set/frozenset,或者任何从它们继承的东西,但是 - 因为可能有一些我遗漏的东西,我想找到一种比运行isinstance所有的更通用的方法那些类型。

我想到了两种可能的方法,但似乎都有些尴尬,因为它们对每种可能的列表类型进行了非常多的测试,我正在寻找更通用的解决方案。

第一个选项:

第二种选择:

测试__iter__属性是否足够?有没有更好的方法来查找对象是否不是列表类型?

提前致谢。

编辑

引用@Rosh Oxymoron 的解决方案的评论):
现在更好地考虑定义,我相信说我需要找到定义中不是数组类型的所有内容,但它仍然可以是字符串/其他简单对象...
检查collections.Iterable仍然会给我实现该方法的对象的True 。__iter__

0 投票
2 回答
1374 浏览

java - 继承和可迭代

Eclipse 自动给了我一个覆盖方法来实现iterator.

(1) 是不是因为我实现了一个从可迭代扩展的接口?

(2) 我的私有变量是集合和列表——它们有自己的迭代器,我不需要定义任何新的迭代器——那我该怎么办?我应该删除遗产吗?

(3) 我们什么时候需要定义一个新的迭代器?当我们定义一个类时,它对我们来说是一种集合?但我想知道为什么,因为我们总是使用通用集合,它们有自己的迭代器..你能给我举个例子吗?

(4) 如果我添加到一组集合 anew HashSet<T>()你会认为它添加一个空列表还是添加new HashSet().add(null)将被视为一个空列表?

0 投票
4 回答
94 浏览

java - 是否实现可迭代类型?

什么时候应该考虑实现Iterable<T>而不是将集合作为实例字段?有什么好处/后果?

0 投票
1 回答
138 浏览

text - 为什么可迭代对象在 Python 中没有长度?

我想我一直在改进我之前的问题。基本上,我需要将一个大文本 (csv) 文件分块以将片段发送到 multiprocess.Pool。为此,我认为我需要在可迭代的对象中迭代行。(查看如何在 python 中多处理大型文本文件?

现在我意识到打开文本文件后的文件对象本身(或 _io.TextIOWrapper 类型)是可逐行迭代的,所以也许我的分块代码(现在在下面,抱歉之前错过它)可以分块它,如果它可以得到它的长度?但如果它是可迭代的,为什么我不能简单地调用它的长度(按行,而不是字节)?

谢谢!

0 投票
3 回答
45813 浏览

python - Unittest 的 assertEqual 和 iterables - 只检查内容

在 unittest 中是否有一种“体面”的方式来检查两个可迭代对象的内容是否相等?我使用了很多元组、列表和 numpy 数组,我通常只想测试内容而不是类型。目前我只是在铸造类型:

我不久前使用了这个列表理解:

但是这个解决方案似乎比 typecast 有点逊色,因为它只在失败时打印单个值,而且对于不同长度的引用和数据也不会失败(由于 zip 功能)。

0 投票
2 回答
162 浏览

java - 是否每次都为 Iterables 调用 for 循环的“条件”?

可以说我有以下代码:

并且 Node.getIterable() 返回一个可迭代对象。getIterable() 函数是每次调用还是仅在 for 循环启动时调用?我应该将其更改为:

0 投票
2 回答
874 浏览

java - 对可迭代进行分块

我有一种从数据库中获取对象负载的方法,该方法返回一个Iterable.

现在,我正在从数据库加载结果集,从中构建对象并使用这些对象填充集合。

显然,我的内存受限于使用这种方法可以加载多少数据以及如果我用完了坏事发生。

我想将实现修改为从数据库中分块数据,而不是一次获取所有数据,然后通过Iterable接口将结果对象公开给客户端。我的数据库驱动程序可以尽其所能,所以我的第一个想法是这样做的自定义实现Iterable

这是一个好方法吗?它让我觉得运行时或库中可能已经支持的东西 - 请不涉及 ORM 解决方案。

0 投票
3 回答
34420 浏览

python - ValueError:Python 中 float() 的无效文字

对所有人:

我很好奇是否有人可以帮助我理解错误:ValueError:float()的无效文字。当我将文本文件传递给列表然后尝试将此列表转换为浮点值时,我得到了这个。

奇怪的是,至少对我来说,当我处理时:

我得到:

'0.000\t0.000...\t0.000\t0.000\n'

我得到:

因此,我不明白为什么 map(float,lines) 不能正常工作。我是否错误地使用了此功能?查看文档,map 函数给出为:map(function, iterable, ...)。列表不是可迭代的吗?

此外,如果有人可以解释这个错误/指向我解释这个错误的方向,我将不胜感激。

提前感谢您对这个问题的帮助。

0 投票
2 回答
9978 浏览

c# - Scala中IEnumerable LINQ等价物的图表?

可能重复:
Scala 中的 LINQ 类似物

我正在寻找在 Scala 中显示 IEnumerable 的 LINQ 方法等价物的图表:

  • 首先是头
  • 选择是地图
  • SingleOrDefault 是...(我不知道)
  • ... 等等

有谁知道这样的“翻译”表?