【问题标题】:Groovy: Remove value from the collection [closed]Groovy:从集合中删除值[关闭]
【发布时间】:2015-06-05 09:48:35
【问题描述】:

我有一个集合,我需要删除一个值。

例如:[44316C5:1233:27171, 44316C7:1233:27276, 44316B5:1233:27245, 44316B7:1233:27271, 44316A5:1233:27267, 44316A7:1233:27268, 44316B6:1233:27284, 44316C6:1233:27309, 44316A6:1233:27270]

集合中“:”之前的每个元素的第一个值应该被删除。

所以上面的集合应该变成

[1233:27171,1233:27276, 1233:27245, 1233:27271, 1233:27267, 1233:27268, 1233:27284, 1233:27309, 1233:27270]

我正在寻找 groovy 中最简单、最有效的方法来实现这一点。

【问题讨论】:

  • 你有没有尝试过?
  • 甚至不清楚,这是什么类型的数据,因为 groovy 还允许通过 [key:val] 创建地图。请不要在问题中提供 toString:s 并至少使用 .inspect() 使其(更少)模棱两可
  • 顺便说一句,这不是从集合中删除一个值,而是关于更改集合的值

标签: java string list groovy


【解决方案1】:

一个非常幼稚和粗略的版本(虽然对于初学者来说很难阅读)

['44316C5:1233:27171', '44316C7:1233:27276', '44316B5:1233:27245'].collect {it.contains(':') ? (it.drop(it.indexOf(':') + 1)) : it}

导致

Result: [1233:27171, 1233:27276, 1233:27245]

基本上它会转换(collectString 的输入列表(与您的伪代码不同),并且对于每个包含 : 的元素,它会删除第一个 : 符号(包括)之前的字母

【讨论】:

    【解决方案2】:

    您可以在每个元素上使用substringindexOf

    ['44316C5:1233:27171', 
     '44316C7:1233:27276', 
     '44316B5:1233:27245', 
     'different_format'].collect { it.substring(it.indexOf(':') + 1) }
    

    以上给出:

    [1233:27171, 1233:27276, 1233:27245, different_format]
    

    【讨论】:

      【解决方案3】:
      def list = [
          '44316C5:1233:27171', 
          '44316C7:1233:27276', 
          '44316B5:1233:27245', 
          '44316B7:1233:27271', 
          '44316A5:1233:27267', 
          '44316A7:1233:27268', 
          '44316B6:1233:27284', 
          '44316C6:1233:27309', 
          '44316A6:1233:27270'
      ]
      
      list.collect { it.drop ( it.indexOf( /:/ ) + 1 ) }
      

      应该这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        相关资源
        最近更新 更多