Мне нужно инкапсулировать список в отдельный объект в Scala, выступающий в качестве класса-оболочки для моей коллекции. Мне нужно это реализовать некоторые методы для работы со списком (подробно мне нужно найти объекты в списке, которые связаны с другим объектом в списке).
Итак, прежде всего мой код:
object Axons {
var axonList=List[Axon]();
var pos=0;
def init(al: List[Axon]) {
axonList= al;
}
def reverse(): List[Axon] = axonList.reverse
def get(count: Int) = axonList(count)
def getList(): List[Axon] = axonList
def length(): Int = axonList.length
}
Теперь итерация происходит как:
for (axon <- axons.getList)
Мне это кажется некрасивым, но я не мог понять, как реализовать итератор, который можно использовать несколько раз для итерации по коллекции.
Другой подход, просто использующий простой список, состоит в том, чтобы определить функцию, которая использует сложение, чтобы уменьшить список, просто удерживая объекты, которые я хочу иметь.
Что вы считаете более распространенным способом?
Фильтруйте в отдельный список, просто удерживая нужные объекты или используя итератор.
По моему мнению, было бы более понятным заключить мою коллекцию Аксонов в отдельный объект с точки зрения разработки программного обеспечения.
Как вы думаете, что лучше всего подходит для этой проблемы?
(Если вы спросите себя, что я делаю и что такое аксон; это часть нейронной сети http://en.wikipedia.org/wiki/Neural_network, а коллекция Axons обернет связи между исходным и целевым нейроном)
спасибо и всего наилучшего
=============================================== ==
Решение от Феликса
object Axons extends Traversable[Axon] {
var axonList=List[Axon]();
def init(al: List[Axon]) {
axonList= al;
}
def reverse(): List[Axon] = axonList.reverse
def get(count: Int) = axonList(count)
//look here!
def foreach[U](f: Axon=> U): Unit = axonList.foreach(f)
//end ...
def length(): Int = axonList.length
def findAxonsBySource(sourceNeuron: Neuron): List[Axon] = {
axonList collect {
case axon: Axon if axon.getSourceNeuron == sourceNeuron => axon
}
}
}