我有這樣的代碼:Groovy中 - 奇怪的收藏#相交行爲
def a1 = [[1],[2],[3]]
def a2 = [[2],[3],[4]]
a1.intersect(a2)
和結果有:
[]
經過研究一段時間後,我發現,數組中的元素必須是實例可比。在DefaultGroovyMethods我們可以看到相貫法的實現。我注意到的第一件事是用於檢查我們列表中的對象存在的集合(TreeSet)(順便說一句,如果HashSet使用它工作正常)。
我檢查了NumberAwareComparator有兩個選項用於檢查compareTo方法。首先是與另一個類的比較委託(吃掉異常?!),第二個是hashCode檢查。
第一個選項DefaultTypeTransformation解釋了我們的行爲。 我們可以看到只有被允許的對象被比較是Comparable,而在其他情況下,我們得到了以後被吃掉的異常。
我的問題是爲什麼它是這樣的?文檔中缺少信息(或者我錯了嗎?)。我錯過了什麼嗎?
它用於返回2.2.1中的預期結果 - 如果你期望'[[2],[3]]'而不是'[]'。也許https://github.com/apache/groovy/commit/4a5bb22d打破了它。 – youri