当前位置: 首页 > 知识库问答 >
问题:

scala中的ListNode实现

楚勇
2023-03-14

嗨,我是Scala的新手,想知道如何将一个简单的ListNode类从Java改写成Scala。

在java中,它如下所示,我可以创建一个head node head=new ListNode(0),然后设置head.next=new ListNode(1)

// Java code
public class ListNode {
    public int val;       // data stored in this node
    public ListNode next;  // link to next node in the list

    public ListNode(int data) {
        this.val = data;
    }
}

但是我发现在Scala中很难重写相同的逻辑,下面是ListNode的case类

// Scala code
case class ListNode[T](vl: T, nt: ListNode[T]) {
    def value: T = vl
    def next: ListNode[T] = nt
}

当我试图实例化一个head节点,并实例化另一个新节点并设置head时,它失败了

scala> val head = ListNode(1, Nil)
<console>:9: error: type mismatch;
 found   : scala.collection.immutable.Nil.type
 required: ListNode[?]
       val head = ListNode(1, Nil)

我正在考虑将“下一个列表节点”放入Option[]中,以处理空用例,但它似乎变得越来越复杂...在Scala中有没有一种简单而正确的方法来实现这一点?

非常感谢。

共有1个答案

卢阳泽
2023-03-14

您正在混合特征定义和实际值。我认为您需要的scala代码只是:

case class ListNode[T](value: T, next: ListNode[T] = null)

根据用例,您可能希望将next更改为选项[listnode[T]]和/或将其定义为var next(如果您希望它是可变的)。

 类似资料:
  • 本文向大家介绍scala中的隐式类型转换的实现,包括了scala中的隐式类型转换的实现的使用技巧和注意事项,需要的朋友参考一下 Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错。所以,一下语句是错误的。 如果需要将一个

  • 我正在使用Java和Scala的twirl模板。所以我试图在模板中对列表进行排序,但我不知道如何覆盖比较器方法。 My List包含类的对象,设计如下: BaseFoo类确实有一个名为 在我的scala旋转模板中,它看起来像: 否在twirl模板中,我正在尝试对其进行排序: 但这似乎无法编译: 需要类类型,但java.util.ArrayList[_

  • (这里的新手垂涎三尺)我一直在寻找将对象(事实)加载到工作内存并通过规则修改它们的方法。根据我目前的发现,我认为我应该在规则结果中使用“修改”指令,但找不到太多关于它的信息。我还遇到了一个使用modifyObject的链接,该链接假定包含2个参数,将旧对象替换为新对象[http://legacy.drools.codehaus.org/Working内存]。 考虑到我使用的是Scala对象(即不可

  • 我是Scala的新手。我在想整个逆变关系是如何运作的。我了解协方差和不变量的概念,我也知道如何在实践中实现它们。我还理解了逆变(协方差的反向)的概念,以及它是如何在Scala中的Function1特性中实现的。它为您提供了一种抽象,而无需为不同的类重新定义Function1实现。但是,我还是不完全明白,奇怪吗?现在,我就快到了…我如何用逆变来解决下面的问题: 上面的例子摘自http://blog.

  • <code>Spark</code>版本为1.3.0。 来自< code > sqlcontext . Scala (https://github . com/Apache/spark/blob/master/SQL/core/src/main/Scala/org/Apache/spark/SQL/sqlcontext . Scala)的源代码: 我真的不能理解上面的代码。 是如何工作的? (_)

  • 问题内容: 我想要的只是使用一些并发Set(看起来根本不存在)。Java用于实现该行为。我想在Scala中做类似的事情,所以我创建了Scala HashMap(或Java ConcurrentHashMap)实例,并尝试添加一些元组: 当然,由于Unit是抽象的也是最终的,因此这使编译过程崩溃了。 如何使这项工作?我应该使用/ 代替吗?我必须确保没有人插入任何值。 感谢帮助 问题答案: 您可以只使