zoukankan      html  css  js  c++  java
  • Groovy In Action 笔记 (7) -- Map相关

    Groovy中的Map默认为java.util.LinkedHashMap类, Groovy的编译器以及classloader会对此类型做特殊处理(后续详解),先看看map的基本操作:

    /**
     * @author :ZackZhou
     * @date :Created in 2020/9/15 11:07 AM
     * @description :Groovy的Map操作
     * @modified By:
     * @version:
     */
    
    def map = [:] //一个空map
    assert map instanceof LinkedHashMap
    println(map.getClass().name)
    
    map << [a:2] // 添加含有一个kv的map, 默认key 为 String类型,也就是 a == "a", 在没有引号的情况下:这里要求 a 不能是Groovy中的关键字,或者含有特殊字符,如 . $ 等
    
    assert map == ["a":2]
    
    map << [b:3,c:4] // 添加含有多个kv的map
    assert map == ["a":2,b:3,c:4]
    assert map.size() == 3 //Groovy中统一的size方法
    
    //获取指定key对应的value的不同方法
    assert map["a"] == 2
    assert map.a == 2
    assert map."a" == 2
    
    def key = 'a'
    assert map."$key" == 2
    
    map.x = 5 //相当于map.put("x",5)
    assert map.x == 5
    assert map.size() == 4
    assert map == ["a":2,b:3,c:4,x:5] // groovy override了 == 操作
    assert map == [(key):2,b:3,c:4,x:5] // 可以使用 (变量) 来代替key
    
    map.'a.b.c' = 6
    assert map == ["a":2,b:3,c:4,x:5,'a.b.c':6]
    
    //map中的一些操作
    def c_map = [a:1, b:2]
    c_map.each {k,v -> println(k + " " + v)}
    c_map.each {entry -> println(entry.key + " " + entry.value)} // 与上面一行相同
    c_map.each {k,v -> c_map[k] = v * v} // double each value
    assert c_map == [a:1,b:4]
    
    def list_a = c_map.collect {k,v -> v} // 也可以是 {entry -> entry.value},或者直接用默认的it : {it.value}
    assert list_a == [1,4]
    
    def list_b = c_map.collect {k,v -> k + " " + v}
    assert list_b == ["a 1","b 4"]
    
    
    def people = [peter: 40, paul: 30, mary: 20]
    assert people
            .findAll{ _, age -> age < 35 }  // 得到一个value 小于35的map
            .collect{ name, _ -> name.toUpperCase() } //得到一个list
            .sort()
            .join(', ') == 'MARY, PAUL'
    
    
    //map作为形参的时候,方法调用可以省略 []
    def map_parser(Map custom_map)
    {
        custom_map.each {println(it.value)}
    }
    
    map_parser(a:1,b:2)
    map_parser a:1,b:2 //groovy 还可以将 方法调用的 () 省略
  • 相关阅读:
    [golang]text/template模板
    [golang]Go内嵌静态资源go-bindata的安装及使用
    GoCN每日新闻(2019-09-23)
    spring mvc中获取请求URL
    HBuilder搭配逍遥Android模拟器进行开发
    python 数据结构
    JDK8+Tomcat8配置https【转】
    JFinal的使用
    RESTful API 设计指南【转】
    jQuery验证控件jquery.validate.js的使用介绍
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13785268.html
Copyright © 2011-2022 走看看