kotlin函数式编程入门及图片处理
函数式编程入门:
对于面向对象编程【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()方法一个点一个点设置相同的颜色,如下:

编译运行:

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

编译运行:

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

编译运行:

kotlin函数式编程入门及图片处理的更多相关文章
- Kotlin函数式编程范式深入剖析
继续学习Kotlin的函数式编程,先定义一个高阶函数: 其实上面这种调用方式在Kotlin用得不多,反而是将Lambda表达式放到方法体中使用得较频繁,如下: 接下来定义一个扩展方法,用来对字符串进行 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- JDK 8 函数式编程入门
目录 1. 概述 1.1 函数式编程简介 1.2 Lambda 表达式简介 2. Lambda 表达式 2.1 Lambda 表达式的形式 2.2 闭包 2.3 函数接口 3. 集合处理 3.1 St ...
- 【JS】394- 简明 JavaScript 函数式编程-入门篇
转载自公众号"程序员成长指北" 写在开头 本文较长,总共分为三大部分:(对于函数式编程以及其优点有一定理解的童鞋,可以直接从 第二部分 开始阅读) 第一部分:首先会通过实际代码介绍 ...
- 《JavaScript ES6 函数式编程入门经典》--推荐指数⭐⭐⭐
这本书比较基础认真看完再自己写点demo一个双休日就差不多, 总体来说看完还是有收获的,会激起一些你对函数编程的兴趣 主要目录如下: 第1章 函数式编程简介 11.1 什么是函数式编程?为何它重要 1 ...
- 如何编写高质量的 JS 函数(4) --函数式编程[实战篇]
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/ZoXYbjuezOWgNyJKmSQmTw作者:杨昆 [编写高质量函数系列],往期精彩内容: ...
- 关于Java8函数式编程你需要了解的几点
函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...
- 【大前端攻城狮之路】JavaScript函数式编程
转眼之间已入五月,自己毕业也马上有三年了.大学计算机系的同学大多都在北京混迹,大家为了升职加薪,娶媳妇买房,熬夜加班跟上线,出差pk脑残客户.同学聚会时有不少兄弟已经体重飙升,开始关注13号地铁线上铺 ...
- 学会JavaScript函数式编程(第1部分)
摘要: JS函数式编程入门. 原文:学会使用函数式编程的程序员(第1部分) 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 在这篇由多部分组成的文章中,接下来将介绍函数式编程的一些概念 ...
随机推荐
- if、elif 条件判断
#!/usr/bin/python #-*- codinig: UTF-8 -*- from __future__ import print_function import os, sys, stat ...
- Linux增加虚拟内存方法
例如增加2G虚拟内存,操作如下: [root@gamedb ~]# free -m[root@gamedb tmp]# dd if=/dev/zero of=/tmp/big_swap bs=1024 ...
- webdriervAPI(操作cookie)
from selenium import webdriver driver = webdriver.Chorme() driver.get("http://www.baidu.co ...
- 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- win10安装tensorflow (cpu版)
前提: 下载anaconda,然后创建一个python虚拟环境: 命令: conda create -n tf_cpu python=3.6 # (tf_cpu 是这个虚拟环境的名字) ...
- selenium—alert用法
切换到弹框: switch_to_alert() ① alert.accept() 确认弹框 driver.switch_to_alert().accept() ② alert.dismiss() ...
- [python] 执行 dos 命令
python的os模块 os模块调用CMD命令有两种方式:os.popen(),os.system(). 都是用当前进程来调用. os.system是无法获取返回值的.当运行结束后接着往下面执行程序. ...
- [转帖]$PWD 和 $(pwd)
$PWD 和 $(pwd) https://blog.csdn.net/shaojwa/article/details/51894980 细节决定成败. 注意两个效果一样,但是注意大小写,PWD是 ...
- ThreadPoolExecutor的重要参数
一.ThreadPoolExecutor的重要参数 1.corePoolSize:核心线程数 * 核心线程会一直存活,及时没有任务需要执行 * 当线程数小于核心线程数时 ...
- 【DP 好题】Kick Start 2019 Round C Catch Some
题目链接 题目大意 在一条数轴上住着 $N$ 条狗和一个动物研究者 Bundle.Bundle 的坐标是 0,狗的坐标都是正整数,可能有多条狗住在同一个位置.每条狗都有一个颜色.Bundle 需要观测 ...