函数式编程入门:

对于面向对象编程【OOP】和函数式编程【FP】 由于在JAVA8的学习中系统的学习过了,所以这里对其概念就不过多解释了,下面直接用代码来看下在kotlin中函数式编程是如何编写的:

首先先新建一个集合:

然后对其进行元素遍历打印,当然这里不用传统的for循环来打印啦,直接用函数式的方式,如下:

很显然函数式编程传递的是行为,其forEach的参数是接收一个String类型,并返回一个Unit类型,所以这里可以先定义一个这种样式的方法,如下:

那就可以在foreach()方法中将这个方法传递进去,如下:

为啥呢?因为需要传的是参数,而目前传的是方法名,对代码进行改装,如下:

因为如果用变量接收了,这时的函数名就可以省略了,如下:

像这种传递函数的方法就可以称之为高阶函数,这个在Java8中也仔细学习过,其实对于上面的写法更简便的写法如下:

而在kotlin中对于上面的代码还对其简化了,如下:

图片处理:

再编码之前先预备一些知识:

RGB三原色:

其中:

最深的红色为255,最浅的红色为0;

最深的绿色为255,最浅的绿色为0;

最深的蓝色为255,最浅的蓝色为0;

而咱们在用的时候一般是用十六进制来表示颜色的,所以就可以表示为:

Bmp图片:

平常在Android中的图片基本上都是png的,而由于这次的实验最终是生bmp的图片,所以对这种格式有一个简单的了解:它又称为Bitmap(位图)或者DIB(Device-Independent Device, 设备无关位图),是Windows系统中广泛使用的图像文件格式。由于它可以不作任何变换地保存图像像素域的数据,所以它是一种无损的数据格式。

实战:

接下来用kotlin来做如下事件:

1、画100*100的蓝色纯色图像。

2、画100*100的红色纯色图像。

3、画100*100的白色纯色图像。

那如何搞呢?这里需要用到一个不是很常用的类:BufferedImage,它可以帮助我们在内存中生成一个图片,如下:

而在Kotlin中可以相当自然的调用Java类,具体如下:

接着可以调用它的setRGB()方法给图片某个位置着上颜色,如下:

此时只是在内存中生成的图像,如果想要生成文件需要调用如下方法:

那运行看一下:

这时打开该图看一下长啥样:

其实还可以用函数式的方式来设置颜色,如下:

为什么可以这样写呢?可以看一下apply()方法的定义:

其实这个apply()就是一个高阶函数,好了,知道了怎么给图片上色接下来回到咱们的需求来,需要生成整张图都是一个颜色的而非只有左上角的一个点,所以这时可以来个双层循环,然后都调用这个setRGB()方法一个点一个点设置相同的颜色,如下:

编译运行:

以此类推,接下来再生成纯绿的图片,只需更改着色的颜色既可:

编译运行:

那如果蓝色呢?无脑的照着来做就可以了嘛:

编译运行:

最新文章

  1. extjs 学习小窍门
  2. 在执行Java命令或eclipse启动程序,提示报错’jvm.cfg无法找到’的解决办法
  3. 本地MVC项目发布到IIS服务器
  4. MOOCULUS微积分-2: 数列与级数学习笔记 7. Taylor series
  5. HTML5 直播协议之 WebSocket 和 MSE
  6. hdu 4640(状压dp)
  7. ERROR 1005 (HY000): Can't create table'matrix.system_log' (errno: 150)
  8. C++多态性与C#的比较
  9. 基于python做的抓图程序1.0.00版本
  10. PHP页面中文乱码问题
  11. sharepoint 2013 附件控件FileUpload怎样检验是否为图片的方法
  12. cocos2d-x 3.3 显示中文
  13. noip2010 引水入城 bfs+贪心
  14. Windows平台安装TensorFlow Q&A
  15. 关于DataTable序列化的事儿
  16. 关于JQuery中$.get()和$.post()和$.ajax()的区别和使用
  17. 将数据 导出excel表格式
  18. ajax返回数据
  19. 转:QTCreater调试时提示ptrace不允许的操作(点击调试之后40秒钟gdb无回应)
  20. C 语言之预处理 ---------文件包括

热门文章

  1. PHP $_SERVER超全局变量
  2. vuejs与angularjs以及react的区别?
  3. DVD Cloner 2019MAC如何使用?
  4. open_basedir restriction in effect,解决php引入文件权限问题 解决方法
  5. Linux删除命令rm
  6. TCP/IP中32位IP地址与字符串转化
  7. cisco路由器配置(三) 最终网关
  8. 【linux杂谈】查看centOS系统的版本号和内核号
  9. Android selector一些坑
  10. java 寻找水仙花数