我可以使用闭包将List转换为Hashmap,其中偶数索引元素是键,奇数索引元素是值吗?

时间:2013-10-24 13:58:07

标签: groovy web-scraping closures

我有一个列表,我希望按2分组并放入HashMap,其中第一个元素是Key,第二个元素是Value。现在我在for循环中这样做:

    Elements dList = showDoc.select("div#details dl > *")
    for(int i = 0; i < dList.size(); i += 2) {
        Element dt = dList.get(i)
        Element dd = dList.get(i+1)

        elsMap.put(dt.text(),dd)
    }

之前我遇到过一个问题,我有一堆具有相同类的元素,我希望能够根据元素的一部分文本进行访问,我让一位同事告诉我如何使用Closure :

def elsMap = showDoc.select("div.info_item").collectEntries{ el -> [el.select('b').text(), el.select(".desc_item")] };

我想知道是否有类似的方法来解决这个问题。我无法弄清楚我是如何通过2s将关闭分组的。

1 个答案:

答案 0 :(得分:3)

这应该有效(using collate):

elsMap = dList.collate( 2, false )
              .collectEntries { a, b -> [ a.text(), b ] }

Collat​​e获取一个列表并将其分组为较小的N列表。

传递false作为第二个参数会删除任何不会产生大小为N的组的尾随条目