Java Scala没有';t将循环内的元素转换为屈服值

Java Scala没有';t将循环内的元素转换为屈服值,java,scala,jsoup,Java,Scala,Jsoup,我对scala还很陌生。我有这个方法来过滤所有以给定名称空间开始的元素(来自Jsoup库) def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String) : org.jsoup.select.Elements = { val elements = for { el <- element.select("*") if el.tagName()

我对scala还很陌生。我有这个方法来过滤所有以给定名称空间开始的元素(来自Jsoup库)

def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String) : org.jsoup.select.Elements = {
    val elements = 
      for {
        el <- element.select("*")
        if el.tagName().startWith(namespace+":")
      } yield el
    elements
  }
def getElementsByNamespace(元素:org.jsoup.nodes.element,命名空间:String):org.jsoup.select.Elements={
val元素=
为了{

el我认为您可能需要添加import
scala.collenction.JavaConversions

事情是
元素
类,由
选择
方法返回的一个不支持理解-因为它是
数组列表
的扩展,因此没有
映射
平面映射
过滤器
方法-除非您对其中一个scala集合进行隐式转换您可能需要添加导入
scala.collenction.JavaConversions.\u
事情是
元素
类,由
选择
方法返回的一个不支持理解-因为它是
数组列表
的扩展,因此没有
映射
平面映射
过滤器
方法-除非您对其中一个scala集合进行隐式转换。

简短回答(tl;dr) 问题是您需要在Scala和Java集合之间进行转换:

def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String): org.jsoup.select.Elements = {
    import collection.JavaConverters._
    val elements = for {
      el <- element.select("*").asScala
      if el.tagName().startsWith(s"$namespace:")
    } yield el
    new Elements(elements.asJava)
  }
def getElementsByNamespace(元素:org.jsoup.nodes.element,命名空间:String):org.jsoup.select.Elements={
导入collection.JavaConverters_
val元素=用于{
el简短回答(tl;dr)
问题是您需要在Scala和Java集合之间进行转换:

def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String): org.jsoup.select.Elements = {
    import collection.JavaConverters._
    val elements = for {
      el <- element.select("*").asScala
      if el.tagName().startsWith(s"$namespace:")
    } yield el
    new Elements(elements.asJava)
  }
def getElementsByNamespace(元素:org.jsoup.nodes.element,命名空间:String):org.jsoup.select.Elements={
导入collection.JavaConverters_
val元素=用于{

el这并不能解决为什么不能使用
Elements
来理解的问题,但为什么不使用
select(namespace |*)
语法来获得相同的结果?@cyrilecorpet不正确。根据Jsoup版本1.10.2,该功能不受支持。您当然可以使用
select(“*| element”)
但不是相反。我已经测试了很多次,它返回了一个空的元素对象。这个线程->声明上述功能不受JSoup支持,即使它是CSS规范的一部分。奇怪的是,我在JSoup文档中看到了这一点:链接文档没有提到使用通配符*不是吗o匹配特定名称空间中的所有元素。这并不能解决为什么不能在理解中使用
元素的问题,但为什么不使用
选择(名称空间|*)
syntax以获得相同的结果?@cyrilecorpet不正确。根据Jsoup版本1.10.2,该功能不受支持。您当然可以执行
select(“*|元素”)
但不是相反。我已经测试了很多次,它返回了一个空的元素对象。这个线程->声明上述功能不受JSoup支持,即使它是CSS规范的一部分。奇怪的是,我在JSoup文档中看到了这一点:链接文档没有提到使用通配符*不是吗o匹配特定名称空间中的所有元素。除非代码仅用于学习目的,否则请使用
select(名称空间|*)
comments中@Cyrille提到的方法,它是一个选择器,可以精确地为您提供所需内容:给定命名空间的所有元素。根据Jsoup版本1.10.2,该功能不受支持。您当然可以执行
select(“*| element”)
但不是相反。我已经测试了很多次,它返回一个空元素object除非代码只是为了学习,否则请使用
选择(名称空间|*)
comments中@Cyrille提到的方法,它是一个选择器,可以精确地为您提供所需内容:给定命名空间的所有元素。根据Jsoup版本1.10.2,该功能不受支持。您当然可以执行
select(“*| element”)
但不是相反。我对它进行了多次测试,它返回一个空元素对象