嵌套选项的惯用Scala
发布时间:2020-12-16 19:00:31 所属栏目:安全 来源:网络整理
导读:让我说我有一个Element对象(来自JDom实际上).它可能有一个称为“组”的子元素,或者它可能不是.如果是这样,那么它可能有一个名为“ID”的属性,或者再也可能没有.我想要ID值,如果它存在. 如果Java我会写. private String getId(Element e) { for (Element chil
让我说我有一个Element对象(来自JDom实际上).它可能有一个称为“组”的子元素,或者它可能不是.如果是这样,那么它可能有一个名为“ID”的属性,或者再也可能没有.我想要ID值,如果它存在.
如果Java我会写. private String getId(Element e) { for (Element child : e.getChildren()) if (child.getName().equals("Group")) for (Attribute a : child.getAttributes()) if (a.getName().equals("ID")) return a.getValue(); return null; } 在斯卡拉我也有 val id = children.find(_.getName == "Group") match { case None => None case Some(child) => { child.getAttributes.asScala.find(_.getName == "ID") match { case None => None case Some(a) => Some(a.getValue) } } } 要么 val id = children.find(_.getName == "Group"). map(_.getAttributes.asScala.find(_.getName == "ID"). map(_.getValue).getOrElse("")).getOrElse("") 他们中的哪一个,或三分之一更习惯了 解决方法
这个怎么样?
val idOption = children .find(_.getName == "Group") .flatMap(_.getAttributes.asScala.find(_.getName == "ID")) 或者,为了理解: val idOption = for { child <- children.find(_.getName == "Group") id <- child.getAttributes.asScala.find(_.getName == "ID") } yield id (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |