与Stack Overflow相关的问题Scala相当于新的HashSet(Collection),如何将Java集合(java.util.List比如说)转换为Scala集合List?
我其实想转换一个Java API调用Spring的 SimpleJdbcTemplate,它返回一个java.util.List<T>,成一个斯卡拉不变HashSet.例如:
val l: java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l
Run Code Online (Sandbox Code Playgroud)
这似乎有效.批评是受欢迎的!
import scala.collection.immutable.Set
import scala.collection.jcl.Buffer
val s: scala.collection.Set[String] =
Set(Buffer(javaApi.query( ... ) ) : _ *)
Run Code Online (Sandbox Code Playgroud) 我正在尝试理解如何重新组织一个程序,我之前将其编写为一系列状态转换:
我有一些业务逻辑:
type In = Long
type Count = Int
type Out = Count
type S = Map[Int, Count]
val inputToIn: String => Option[In]
= s => try Some(s.toLong) catch { case _ : Throwable => None }
def transition(in: In): S => (S, Out)
= s => { val n = s.getOrElse(in, 0); (s + (in -> n+1), n+1) }
val ZeroOut: Out = 0
val InitialState: S = Map.empty
Run Code Online (Sandbox Code Playgroud)
有了这些我希望构造一个程序来传递一些初始状态(一个空的Map),从stdin读取输入,将其转换为In,运行状态转换并输出当前状态S和输出Out到 …
在我的气喘吁吁的困惑之后,有什么好的资源可以解释新的Scala 2.8集合库是如何构建的.我有兴趣找到有关以下内容如何组合在一起的一些信息:
List,Iterable)TraversableLike)List.companion)implicit给定点的范围内的对象通常,默认实现Object.hashCode()是内存中对象的已分配地址的某个函数(尽管这不是JLS强制要求的).鉴于VM在内存中分流对象,为什么System.identityHashCode()在对象的生命周期内返回的值永远不会改变?
如果它是"一次性"计算(对象的hashCode计算一次并隐藏在对象标题或其他东西中),那么这是否意味着两个对象可能具有相同的identityHashCode(如果它们碰巧首先在内存中的相同地址)?
在每个技术出版物中,以及在本网站上,人们总是将OO语言与Smalltalk进行比较.我的经验是Java:Smalltalk是如此重要以至于我应该学习它吗?
我希望能够声明这样的东西:
trait Narrowable[A] extends Iterable[A] {
def narrow[B <: A & B <: AnyRef] : Iterable[B]
}
Run Code Online (Sandbox Code Playgroud)
它的类型B应该是既有的亚型A 和 AnyRef.这可能吗?
如果我有类似的东西List[Option[A]],我想将其转换为a List[A],标准方法是使用flatMap:
scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))
scala> l.flatMap( o => o)
res0: List[java.lang.String] = List(Hello, World)
Run Code Online (Sandbox Code Playgroud)
现在o => o只是一个身份功能.我原以为会有办法:
l.flatMap(Identity) //return a List[String]
Run Code Online (Sandbox Code Playgroud)
但是,我不能让这个工作,因为你不能生成一个object.我试了几件事无济于事; 有没有人有这样的工作?
在Martin Odersky 最近发表的关于 Scala 程序员能力水平的文章中,在专家库设计师部分,他包含了术语"早期初始化者".
在Scala编程中没有提到这些.这些是什么?
因为那里有非图灵完整的语言,并且鉴于我没有在大学学习Comp Sci,有人可以解释一下Turing-incomplete语言(如Coq)不能做的事情吗?
或者是没有实际利益的完整性/不完整性(即它在实践中没有太大的区别)?
编辑 - 我正在寻找一个答案,你不能用非Turing完整语言构建一个哈希表,因为X或类似的东西!
programming-languages functional-programming turing-complete coq
scala ×6
java ×3
concurrency ×1
coq ×1
deadlock ×1
generics ×1
hashcode ×1
heap-memory ×1
jvm ×1
oop ×1
scala-2.7 ×1
scala-2.8 ×1
scala-option ×1
scalaz ×1
smalltalk ×1