android groovy语法与数据结构

深度探索 Gradle 自动化构建技术(二、Groovy 筑基篇,flutter弹窗动画 clouser() def xxx = { paramters -> code } def xxx = { 纯 code } 从 C/C++ 语言的角度看,闭包和函数指针很像,闭包可以通过 .call 方法来调用,也可以直接调用其构造函数,代码如下所示: 闭包对象.call(参数) 闭包对象(参数) 如果闭包没定义参数的话,则隐含有一个参数,这个参数名字叫 it,和 this 的作用类似。it 代表闭包的参数。表示闭包中没有参数的示例代码: def noParamClosure = { -> t 阅读详情

android groovy语法与数据结构


帮自己记录下语法和数据,对于android开发者而应,groovy写的机会还是比较少的,忘记了就来瞅瞅。groovy的语法与数据结构比较像python,函数比较多,比较灵活。
java的语法跟groovy通用

语法

switch

用法跟java一样,但是类型无限定:字符串、整型、数组、范围(1..5 这样的结构指范围)、类型等。


def x = 1.23
def result
//无限制,可匹配list 某个元素   范围
switch (x){
    case 'foo':
        break
    case 123:
        break
    case [1.23,3,4,5,'fpp']:
        result = 'inlist'
        break
    case 12..34:
        break
    case Integer:
        break
    case BigDecimal:
        result = "BigDecimal"
        break
    case 1.23:
        result = 'x'
        break
    default:
        result = 'nothing'
        break
}

for

范围遍历:

def sum = 0
for (i in 0..9){
    sum+=i
}

list遍历:

def sum = 0
for(i in [1,2,3,4,5,6,7,8,9]){
    sum +=i
}

map遍历:

def sum = 0
for (i in ['lili':1,'xiaoming':2]){
    sum+=i.value
}

当然,java的遍历可以用:

def sum = 0
for(int i=0;i<10;i++){
    sum=sum+i
}

with

with应该属于闭包结构了,不属于语法,但还是介绍下:

Person person = new Person();
person.with {
    name = "xiaoming"
}

可以用with来初始化属性,进行赋值。

数据结构

list

list的结构在java里面对应的是ArrayList类型的。
定义如下:

//这种定义,不限制类型,取值需要注意
def list =[1,2,3,"4"]

//规定集合中数据类型 array = [1,2,3,'aa'] as int[]  这样就会运行报NumberFormatException错,要注意
def array = [1,2,3] as int[]
//打印集合大小
println array.size()
//验证下类型 打印 java.util.ArrayList
println array.class.name

取值、存值操作,要注意:

def list =[1,2,3,"4",'test']
//取值
//访问第一个元素
println list[0]
//访问最后一个元素 -1代表右侧第一个,-2代表右侧第二个,
println list[-1]
//访问下标 1 到 下标 3的元素,就是第二个到第四个元素,返回一个lsit
println list[1..3]

//存值 
list.add('5')
//添加到最后
list.leftShift(19)
//下标 添加
list.add(0,"first")

//特殊操作
//排序
//例子:绝对值排序 Comparator是个比较器,跟java一样
def sortlist = [-1,2,-4,5,7,-9]
Comparator mc ={ a, b-> a==b?0:Math.abs(a) < Math.abs(b)?-1:1}
Collections.sort(sortlist,mc)
println(sortlist)
//例子:长度比较
def stringList = ['a','asdas','33','32324242','22']
stringList.sort{it -> return it.size()}
println(stringList)

//查找
def findList = [-3,6,2,7,-5]
//例子 找出第一个是偶数 的元素
println findList.find{return it % 2 == 0}
//找出 所有偶数 的集合
println findList.findAll{return it % 2 == 0}
// 只要有一个元素满足条件  就返回 true
println findList.any(){return it % 2 == 0}
// 所有元素满足条件  就返回 true
println findList.every(){return it % 2 == 0}
// 返回集合中 ascii码最小的
println findList.min()
// 返回集合中 闭包处理后 最大的 元素
println findList.max{it -> return Math.abs(it)}

//统计
//返回 所以偶数元素集合的size
println findList.count{return it%2==0}

//丢弃
//dropRight 丢弃最右边 2个元素,并返回一个新的集合
def newlist = findList.dropRight(2)

map

groovy的map结构很直接的,很暴力。对于java里面的结构为LinkedHashMap。定义如下:

def colors = [red:'fff',green:'test',gray: 1]

上面就定义三个健值对,冒号前的是Key值,后面是Value值。Value值类型无约束的,但是取出来用的时候类型要对,要不然就报错了,动态语言就是这样的。
一些操作如下:

def colors = [red:'fff',green:'test',gray: 1]
//取值操作
println colors['red']
println colors.red
println colors.get('red')

//放值操
colors.yeelow = 'hujin'
colors.leftShift(blue:'king')
colors.complex =[a:'1',b:'2']

//遍历
colors.each {
    def keyAndValue ->
        println(keyAndValue.key + "   " + keyAndValue.value)
}

//验证下map 打印结果:java.util.LinkedHashMap
println colors.getClass().name

范围

特有的结构,表示一个范围,一般用于整型集合。定义如下:

def range = 1..10

操作:

def range = 1..10
//IntRange
println(range.class)
println(range[0])
//是否包含
println(range.contains(10))
//开始值
println range.from
//结束值
println range.to
Android Studio 中如何运行 groovy 程序 运行 groovy 程序 首先由几个需要注意的地方 最好不要在Java Libray module 以外的其他类型module,运行groovy程序,脚本类的还问题不大,如果是在GroovyConsole运行java类的groovy程序时,就明显无法执行了。 因为 groovy 插件和 android 插件不兼容,所以不能在Android 相关的module上使用 groovy。 ... 阅读详情

相关推荐

彻底清理Easy Connect残留:从服务到驱动的完整卸载指南

在企业网络接入场景中,远程客户端常因内核驱动、系统服务和网络过滤组件导致卸载残留,进程无法结束、文件被锁定、注册表项顽固存在。其原理在于驱动挂载网络协议栈,服务守护进程,卸载时资源占用导致清理不彻底。彻底清理的技术价值在于恢复系统纯净、避免网络异常和软件冲突。典型应用场景包括企业办公机、个人笔记本更换或重装客户端。本文针对深信服Easy Connect,提供从停止服务、删除驱动到清理注册表和虚拟网卡的分步操作链路,并给出验证方法和避坑经验。

weixin_31292729的博客 239

[Groovy]Groovy with ‘with’

Groovy里with 关键字的使用 def calendar = Calendar.instancecalendar.with { clear() set MONTH, JULY set DATE, 4 set YEAR, 1776 println time} 转载于:https://www.cnblogs.com/buhaiqing/archive/2012/11/23/27...

weixin_30826095的博客 173

NetApp 7-mode初始化详解(原AGGR重建)及注意事项

没想到有生之年还能再写个7-mode的文章,上次接触可能已将近十年,本次恰巧碰到这个机会,边学习边整理,整整一天时间,碰到了不少坑,作为记录。

RaySun的技术Blog 2752

安卓入门六十六 Gradle-Groovy

此外,在 GString 中新增了一系列的操作符,这能够让我们对 String 类型的变量有 更便捷的操作。但是,如果你这个类或变量要用于其它模块的,建议不要使用 def,还是应该使用 Java 中的那种强类型定义方式,因为使用强类型的定义方式,它不能动态转换为其它类型,它能够保证外界传递进来的值一定是正确的。可以看到,如果我们直接在类、方法、变量中定义一个闭包,那么这三种关键变量的值都是一样的,但是,如果我们在闭包中又嵌套了一个闭包,那么,this 与 owner、delegate 的值就不再一样了。

weixin_52735932的博客 1125

高阶玩法——Dify生成的数据自动写入mysql数据库

采用自定义工具方式,利用 python编写一个服务sql_save_post,将接收到的内容写入指定数据库的表中,并为该服务撰写一个 OpenAPI 的 schema。配置工作流:我们以写入天气预报为例,在生成天气预报内容后,连接自定义工具“sql_save_post”,将所需的字段配置完成后,实现将生成的内容自动写入mysql数据库中。编写OpenAPI的schema:在dify平台的工具栏目,创建自定义工具,输入工具名称“sql_save_post”。工具:sql_save_post;

qq_44493378的博客 8539

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

睶 38万+

视频教程-Groovy精简教程-Java

Groovy精简教程 Android研发工程师。南京邮电大学毕业,曾就任于创...

weixin_28982313的博客 575

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

Gradle入门之Groovy语法

前言 gradle是一个基于JVM的构建工具,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与Java代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy可以使用其他Java语言编写的库。目前已经应用在多数Android技术体系中,比如,jenkins,插件化,组件化,模块化等等。如果你不了解gradle,那么前面几个技术点很难深入理解。 Groovy 的语法跟 kotlin 类似,如果我们有 kotlin 的经验的话那么学习 gro

一个学渣走向android之路 854

22、嵌入式软件随机延迟生成与加密算法防护技术

本文探讨了嵌入式软件中的随机延迟生成方法与块密码软件实现的高阶掩码及洗牌技术。重点介绍了浮动均值延迟生成方法,其在8位AVR平台上的实现效率为Θ(1),显著提升了抗相关功率分析(CPA)攻击的能力,相比传统方法更安全且轻量。同时,分析了高阶掩码与洗牌技术结合的方案,通过理论建模量化其对高级差分功率分析(DPA)攻击的抵抗能力,并以AES为例展示了该方案的应用流程。最后对比了不同防护技术在安全性与开销之间的权衡,为实际应用中选择合适的安全策略提供了依据。未来可进一步优化实现效率并融合多种防护手段以应对复杂安全

fern8的博客 88

PCL点云库入门(第6讲)——PCL库中Eigen数学工具库的基本使用(持续更新)

Eigen库是一个高性能的C++模板库,专注于线性代数、矩阵和向量运算,以及相关的数值分析和算法。在Eigen库中,所有的矩阵和向量均被视为矩阵模板类的实例。向量可以被看作是特殊形式的矩阵,具体表现为只包含1行或1列。

qq_36812406的博客 1752

2024年安卓最新深入学习-Gradle-自动化构建技术(二)Groovy-筑基,2024年最新海尔技术面试

assert (!groovy 变量的定义与 Java 中的方式有比较大的差异,对于 groovy 来说,它有两种定义方式1)、强类型定义方式:groovy 像 Java 一样,可以进行强类型的定义,比如上面直接定义的 int 类型的 x,这种方式就称为强类型定义方式,即在声明变量的时候定义它的类型。2)、弱类型定义方式:不需要像强类型定义方式一样需要提前指定类型,而是通过 def 关键字来定义我们任何的变量,因为编译器会根据值的类型来为它进行自动的赋值。下面,我们就使用def。

2401_84563080的博客 1282

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

暴力突破 Gradle 自动化项目构建(二)- Groovy 核心语法

一、前言 二、Groovy 核心语法 2.1 Groovy 中的变量 2.1.1 变量的类型 真正意义上讲 groovy 中是不存在基本类型的,无论我们定义基本类型还是对象类型,都会被转换为对象类型。下面我们看个例子: 可以看到,基本类型会被我们的编译器编译成包装类型。 2.1.2 变量的定义 groovy 变量的定义与 Java 中的方式有比较大的差异,...

lerendan的博客 1191

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

groovy基础语法学习,2020-2021蚂蚁金服Android面试真题解析

} println sum//45 /** 对list的循环 */ def sum1=0; for (i in [1,3,5,32,4,2,6,9,5,45,1]){ sum1+=i; } println sum1//113 /** 对Map进行循环 */ def sum2=0; for (i in [‘a’:1,“b”:2,“c”:“ha”]){ sum2+=i.value } println sum2//3ha 数据结构 /** 数据结构 范围 */ def range=1…1

m0_66264630的博客 292

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Groovy精简教程-黄俊东-专题视频课程

注重实践,剔除繁琐的理论,通过案例讲解我们常用的知识点,各个知识点之间相对独立,不用担心某一个知识点学不会而耽搁学其他的知识点。轻轻松松入门Groovy。...

黄俊东的专栏 549

Android自定义Gradle插件

一、Gradle 我们知道在我们现在使用Android Stduio开发Android项目的时候,Android Studio是基于Gradle来帮助我们构建,管理项目的。 Gradle:Gradle是一个项目构建工具,用来帮助我们管理项目的依赖、打包、发布、部署等工作。 Gradle是通过如build.gradle这种gradle脚本来进行项目构建的,所以我们对项目的构建配置都是可以写在gradle构建脚本中。 gradle构建脚本使用的是Groovy语言,Groovy语言也是一种jvm语言,最终也是编译

殇神马的博客 1482

欢迎使用优快云-markdown编辑器

如果之前没有接触,可以尝试一下,对于安卓打包啊,插件配置啊还是挺重要的。 现在网上很多开源的组件啊很多都需要配置各种参数。这里指的是安卓啊。 比如安卓热修复,插件,还有组件都需要gradle配置,而gradle基于groovy 是一种DSL语言。所以掌握这个还是比较重要,虽然你工作很少用吧。一开始我也不是很熟悉,不过这里零基础,所以总是写一个helloworld吧 新建一个安卓项目,找到gr

u010527630的专栏 306

Android Gradle开发与应用 (二) : Groovy基础语法

Android Gradle开发与应用系列 : 基础语法说明

朱豪凯的博客 1962

01Android之Gradle以及Groovy语法

Android之Gradle以及Groovy语法 一.groovy语法 1.注释符 与java一致 2.打印 , 字符串,单引号和双引号没有区别 groovy可以省略最后面的分号,以及() println "Hello from the shebang line" 3.定义变量和全局遍历 def i = 10 //相当于java 本地变量 println i def s = 'hello world' println s ext { //相当于static

LJLThomson的博客 608

Android Gradle开发与应用 (三) : Groovy语法概念与闭包

介绍Groovy的语法概念及闭包的使用

朱豪凯的博客 2067

android Groovy基础语法

Groovy基础语法Groovy基础语法变量引号区别string用法闭包声明、调用、返回this owner delegate 区别和使用 Groovy基础语法 变量 引号区别 Groovy可以用单引号、双引号、三引号来表示字符串,但是各自还是有区别的。 单引号 内部不能引用扩展表达式,如下的 name 字段 是不能引用到的。 要处理特殊字符,比如换行 、内部引号、斜杠等 def name = 'test' def sex = 'name : ${name}' def age = 'arg \n 33'

HUandroid的博客 451

Android--Groovy语法、组件化架构简析

组件化就是将我们的APP拆分成很多个模块,每个模块可以单独运行,以便于开发维护和测试,组件化中必不可少的是Gradle的配置,Gradle中使用的是Groovy语言,Groovy也是JVM语言的一种,如果你熟悉kotlin,那么学习Groovy将更容易,这也得益于kotlin结合了各大语言的优点,引入了很多最新、最流行的概念 一、Groovy简单上手 在AS中新建一个module,并在生成的Gra...

aruba的博客 1734

android groovy方法,使用 Groovy 开发 Android 应用

Groovy Android场景我们都知道 Android 原生应用基本都是使用 Java 开发的,但是实际上 Groovy 也是运行在 JVM 上的,所以也可以用于开发 Android 应用程序,只是需要做一些额外的准备工作。环境配置既然是使用 Groovy 语言进行开发,所以第一步就是在 IDEA 或 Android Studio 中安装 Groovy 插件。步骤:打开 Settings 或 ...

weixin_36480122的博客 1460

[Android Groovy]第一讲.开始用Groovy语言来写安卓程序吧!!!

相比Java,Groovy到底可以写的多简单.

麟麟麟的专栏 3447

Android Studio开发Groovy

怎么在Android Stuido上开发Groovy,有源码

zhjali123的专栏 1万+
上一篇: android 初识SPI
下一篇: android Gradle插件分类与使用
HUandroid
博客等级 码龄10年 35粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值