Either类java_通过实例学习Either 树和模式匹配

本文介绍了如何使用Either类在Java中构建树形结构,并模拟Scala的模式匹配来遍历树。通过示例展示了如何利用Either处理两种类型的数据,以及如何在树的深度查找和元素搜索中应用类似模式匹配的语法。
摘要由CSDN通过智能技术生成

前言

在这一期的文章中,我将继续介绍 either,使用它构建树形结构,该结构允许我模拟 scala 的模式匹配来构建遍历方法。

在 java 中使用泛型数据,either 会成为接收两种类型之一的单一数据结构,这两种类型保存在 left 和 right 部分中。

在上一期文章的罗马数字解析器示例中,either 保存了 exception(左侧)或 integer(右侧),如图 1 所示:

89c9be3b82feeb58eb5e4de5275b55ba.gif

图 1. either 抽象保存了两种类型的其中之一

在本示例中,either以如下的方式被填充:

either result = romannumeralparser.parsenumber("xlii");

scala 模式匹配

scala 的众多出色功能之一就是能够使用 模式匹配 进行调度(参阅 参考资料)。与描述相比,演示更简单一些,因此我们会考虑清单 1 中的函数,将数字分数转换为字母分数:

清单 1. 使用 scala 模式匹配根据分数调度字母分数

val valid_grades = set("a", "b", "c", "d", "f")

def lettergrade(value: any) : string = value match {

case x:int if (90 to 100).contains(x) => "a"

case x:int if (80 to 90).contains(x) => "b"

case x:int if (70 to 80).contains(x) => "c"

case x:int if (60 to 70).contains(x) => "d"

case x:int if (0 to 60).contains(x) => "f"

case x:string if valid_grades(x.touppercase) => x.touppercase

}

printf("amy scores %d and receives %s\n", 91, lettergrade(91))

printf("bob scores %d and receives %s\n", 72, lettergrade(72))

printf("sam never showed for class, scored %d, and received %s\n",

44, lettergrade(44))

printf("roy transfered and already had %s, which translated as %s\n",

"b", lettergrade("b"))

在 清单 1 中,函数的整

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值