我对在groovy中使用排序的映射感兴趣(使用gremlin,这是用于图形数据库的DSL)。
我在这里按排序的地图查看了此博客文章,但我仍然有些困惑。
排序的地图如何声明?它与地图的标准方式有何不同y = [:]
?
使用排序映射时,插入列表中的项目是否会按照插入顺序进行?还是sort{}
在对已排序的地图中的项目进行排序之前必须先运行?
如果您只是这样声明地图:
def m = [:]
然后,您可以看到Groovy默认情况下 LinkedHashMap
assert m.getClass().name == 'java.util.LinkedHashMap'
如果您查看LinkedHashMap的文档,它将显示:
Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于,它维护一个贯穿其所有条目的双向链接列表。此链表定义了迭代顺序,通常是将键插入映射的顺序(插入顺序)。
所以,LinkedHashMap
有一个顺序,你可以通过调用影响Groovy中的顺序sort
def m = [ b:1, a:2 ]
// Sort by descending value
m = m.sort { -it.value }
println m // prints [a:2, b:1]
如果您想对键进行自然排序,则可以使用Java的排序映射之一,例如 TreeMap
要说您想在Groovy中使用它,可以执行以下操作:
// def tm = [ tim_yates:1, F21:2 ] as TreeMap // works as well
TreeMap tm = [ tim_yates:1, F21:2 ]
然后打印它,您可以看到它是按以下键排序的:
println map // prints [F21:b, tim_yates:a]
TreeMap
添加键时,A 将保持顺序。LinkedHashMap
添加新值时,A 不会自动保持排序。
我有一个Object数组,它声明如下所示: 我需要根据每个对象的第三个元素,然后根据第二个元素对这些对象进行排序。因此我的输出将是:
问题内容: 我有一个这样创建的列表变量: 在我的Android应用程序中,将填充此列表。 只是一个例子: 我正在通过扩展和实现各种方法来显示结果。 我的问题:我需要根据地图的键 名* 按字母顺序排序 * 问题:基于地图的键 名 按字母顺序排序的简单方法是什么? 我似乎无法解决这个问题。我已经提取的每个 名字 从每个成阵列,并且排序它()。但这并不能保留每个数据中的其他数据,因此我不太确定如何保存其
我试图在我的简单Groovy脚本中使用“httpBuilder”。当我使用'@grab'导入依赖项时,一切都运行良好。但是,我希望将jar保存在一个不同的目录中,并使用classLoader函数导入它。我已经复制了“@grab”放在我的grapes目录中的“http-builder-0.7.jar”,并将其粘贴到我的Groovy脚本运行的同一目录中(在Windows上)。然后注释掉“@Grab”语
问题内容: 我正在使用map接口从文件中读取,然后将其中的值存储为键值对。文件格式如下 我将从该文件中读取数据并将其存储为键值对,然后将其显示给用户。我的要求是以这种格式显示结果 因此,我需要按值的降序对地图进行排序。这样我就可以将它们显示为我的结果..我已经阅读了有关此内容并找到了以下代码 我希望这将按升序对值进行排序,我只想知道此方法是否正确,或者其他有效方法对我有帮助? 问题答案: 由于您可
我有一个,我希望在其中返回字符串值的列表,但按int键的升序/降序排序。如果返回的是我也希望排序的迭代项,例如返回或列表,那么这将很容易,但是我想不出一种方法来做到这一点,除了在使用遍历整个映射并插入值以从映射键索引(如下面所示)之后手动创建一个列表,然后在该列表中嵌套另一个以消除任何空值之外。 请告诉我有更好更有效的方法吗?任何帮助都是非常感谢的!
问题内容: 我需要像TreeMap这样排序的地图,但按值排序。我的地图很大,所以我不能随时随地对我的地图进行排序。是否存在解决此问题的良好解决方案?也许存在外部罐子遇到这个? 问题答案: 有多种方法可以满足您的要求。正如您随后澄清的那样,您当前可能有重复的对象,也许您可以用第三方多重映射(Guava,Apache Commons Collections )替换您的对象,然后交换您的键和值- 即