У меня есть итератор типа Iterator[String]
размером 2501235 элементов. У меня также есть список из 100 хэш-функций, и я хочу хэшировать каждый элемент в итераторе со всеми хеш-функциями. Приведенный ниже код - это то, что у меня есть до сих пор, но его выполнение занимает очень много времени, есть ли способ исправить код, чтобы он работал быстрее?
def hashing_item(value: (Int,List[List[Int]],List[Hash_Function]), item: String): (Int,List[List[Int]],List[Hash_Function])= {
val (bits,res,elems) = (value._1,value._2,value._3)
val hashed_input = res ++ List(elems.map(func => func.apply(item) % bits))
(bits,hashed_input,elems)
}
val tempList: List[List[Int]] = List()
val hashing_elems = s.foldLeft(bits,tempList,hashes)(hashing_item)
Если я правильно понимаю код, вам нужен только flatMap
вместо этого foldLeft
iterator.flatMap { item =>
hashes.iterator.map { func =>
func.apply(item) % bits
}
}
Это вернет еще один Iterator
, который не будет ничего вычислять, пока не понадобится.