【问题标题】:How to create TreeMap of ArrayList in Groovy如何在 Groovy 中创建 ArrayList 的 TreeMap
【发布时间】:2015-02-12 12:45:27
【问题描述】:

我通过循环一个值数组创建了一个 ArrayList,它在“通用”键/值结构中创建了一个数组。

def timeWithIdentifier = []
for (i = 0; i <= time.size()-1; i++) {
     timeWithIdentifier [i] = i + ":'" + time[i] + "'";
}

数组如下所示:
timeWithIdentifier = [0:'1423734900000', 1:'1423735200000', 2:'1423735500000', 3:'1423735800000', 4:'1423736100000', 5:'1423736400000', 6:'1423736700000', 7:'1423737000000', 8:'1423737300000', 9:'1423737600000', 10:'1423737900000', 11:'1423738200000', 12:'1423738500000', 13:'1423738800000', 14:'1423739100000', 15:'1423739400000', 16:'1423739700000', 17:'1423740000000', 18:'1423740300000', 19:'1423740600000', 20:'1423740900000', 21:'1423741200000', 22:'1423741500000', 23:'1423741800000', 24:'1423742100000', 25:'1423742400000']

通过timeWithIdentifier.getClass()询问这个类我得到以下结果java.util.ArrayList

现在我想使用以下方法将上述键/值组合放入一个新的 TreeMap 中:treeMapTime = new TreeMap&lt;Integer, Long&gt;(timeWithIdentifier )

不幸的是,我收到以下错误

groovy.lang.GroovyRuntimeException:找不到匹配的构造函数:java.util.TreeMap(java.util.ArrayList)

我错过了什么?

【问题讨论】:

  • 我认为您希望有一些不同的东西来代替 timeWithIdentifier。这个变量的类型是ArrayList&lt;String&gt;,它不是键值结构,而是简单的零索引列表,推荐用于类似结构的随机访问。有关详细信息,请参阅我的答案。

标签: arraylist groovy treemap


【解决方案1】:

tl;博士:

应该这样做:

def time = (1..10)
def timeWithIdentifier = [:]
for (i = 0; i <= time.size()-1; i++) {
     timeWithIdentifier[i] = time[i]
}

new TreeMap(timeWithIdentifier)

说明:

可以看出here TreeMap 没有将ArrayList 作为构造函数参数——应该传递Map

使用 for 循环处理项目时,您创建的不是Maps 的实例,而是字符串。将 timeWithIdentifier 更改为 Map 的一个实例,在 i 键下添加项目。然后将整个timeWithIdentifier 作为参数TreeMap 构造函数传递。它可以更容易:

def time = (1..10)
def timeWithIdentifier = [:] as TreeMap
for (i = 0; i <= time.size()-1; i++) {
     timeWithIdentifier[i] = time[i]
}

【讨论】:

  • 嘿 Opal,这正是我所需要的。非常感谢 :-) 最后一个问题(由于我的问题中有一个错误(实际上键/值的顺序应该是相反的)):如果 time应该是键和 stepNumber 值?其实我想通过拨打firstKey()lastKey()...来打发时间
  • 据我了解应该是timeWithIdentifier[time] = i。如果可行,请接受并投票。
  • timeWithIdentifier[time[i]] = i 成功了。使用timeWithIdentifier[time] = i 导致 java.util.ArrayList 无法转换为 java.lang.Comparable 无论如何...非常感谢! :)
  • 啊,当然。 time 的定义不同;)谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2020-03-21
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多