【问题标题】:Is there a Groovy equivalent to Ruby's #map?是否有与 Ruby 的#map 等效的 Groovy?
【发布时间】:2014-08-18 19:55:37
【问题描述】:

我知道#each 是有支持的

  Book.findAll().each(){ book->
    println ">>> ${book}"
  }

甚至还有support for #inject

  def sentence = m.inject('Message: ') { s, k, v ->
    s += "${k == 'likes' ? 'loves' : k} $v "
  }

是否支持#map for Groovy(没有任何特殊库,如Functional Java)?

  def list = [1,2,3,4].map{ num->
    num + 1
  }

  assert list == [2,3,4,5]

【问题讨论】:

    标签: list collections map groovy


    【解决方案1】:

    你想要collect

    groovy:000> [1,2,3,4].collect { num -> num + 1 }
    ===> [2, 3, 4, 5]
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      你可以使用collect,如

      [1, 2, 3, 4].collect { it + 1 }
      

      对于直接在集合中的每个对象上调用方法的情况,使用点号运算符的语法更短:

      [1, 2, 3, 4]*.plus 1 
      

      (使用 Groovy 添加到 java.lang.Integer 的方法来实现 + 运算符)

      即使列表包含空值,此运算符也有效:

      groovy:000> [1, 2, 3, null, 4]*.plus 1
      ===> [2, 3, 4, null, 5]
      

      collect 你必须检查的地方:

      [1, 2, 3, null, 4].collect { it?.plus 1 }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-28
        • 2011-02-18
        • 1970-01-01
        • 2011-04-14
        • 2010-09-29
        • 1970-01-01
        • 2012-05-12
        • 2011-10-31
        相关资源
        最近更新 更多