"dependencies": {
"max_recurrences": { "$ref": "#recurring" },
"recurrence_arguments": { "$ref": "#recurring" }
},
"definitions": {
"recurring": {
"id": "#recurring",
"properties": {
"recurring": { "enum": [true] }
}
}
}
有一个BitSet
方法,但它没有像提供此方法的其他类型那样实现stream()
接口。这是否有特定的原因?
答案 0 :(得分:8)
Iterable
中提供foreach
(iterator
,spliterator
和BitSet
)中的所有方法均未提供。 stream()
中没有Iterable
方法。
此外stream()
的{{1}}方法不会在位集的位上返回流,而是在其值设置的位的索引上返回一个流(这是一种令人困惑的TBH)。因此,从技术上讲,似乎与BitSet
几乎没有任何共同之处。
答案 1 :(得分:4)
一个原因(可能不是完整的原因)是Iterable
效率低下,因为比特索引必须加框(*);流可以使用原始整数。
有一种有效的方法来迭代bitset而不使用Iterable
,如Javadoc中所述,所以它并不是必需的。
(*)但是,对于大小为128或更小的位集,装箱会很便宜,因为将使用缓存的盒装实例。
答案 2 :(得分:3)
BitSet
不是java集合框架的“真正”成员,因此从技术上讲,不需要实现Collection.iterator()
并提供一个。
public class BitSet implements Cloneable, java.io.Serializable
更重要的是,两者都不合适。
BitSet不是泛型,与java.util.Iterator不同;与迭代器不同,BitSet为临时方法提供了副作用和随机寻址的特殊功能。
答案 3 :(得分:-1)
可能要避免昂贵地将每一位装箱到img = np.zeros((1,96,236,236))
sswitchs = np.zeros((1,96,708,708))
inp = T.tensor4('img')
SW = T.tensor4('SW')
tester = switchs(inp,3,SW)
f = theano.function([inp, SW], tester)
d = f(img,sswitchs)
实例。
使用自己的API循环使用它将避免所有分配。