视图(View) | 学习笔记

简介: 快速学习视图(View)

开发者学堂课程【Scala 核心编程 - 进阶视图(View)学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9062


视图(View)


内容介绍:

一、 View 的基本介绍

二、 View 的简单运用(通过案例体验 View 的用法)

三、对 View 的小结


一、View 的基本介绍

1.基本介绍

Stream 的懒加载特性,也可以对其他集合应用 view 方法来得到类似的效果,

具有如下特点:

1) view 方法产出一个总是被懒执行的集合(即这个集合中的各种操作都是以懒加载的形式来进行处理)。

(2) view 不会缓存数据,每次都要重新计算,比如遍历 View 时。


二、 View 的简单运用(通过案例体验 View 的用法)

1.案例

请找到1-100中,数字倒序排列和它本身相同的所有数(1,2,11,22,33...)。

def multiple(num: Int): Int = {num}def eq(i: Int): Boolean = {i.toString.equals(i.toString.reverse)

}

//说明:没有使用 view

val viewSquares1 = (1 to 100)

.map(multiple)

.filter(eq)

println(viewSquares1)

//for (x <-viewSquares1){}

//使用 view

val viewSquares2 = (1 to 100)

.view

.map(multiple)

.filter(eq)

Println(viewSquares2)

首先 def eq(i: Int): Boolean 中运用了 eq ,

传进了一个 Boolean 用以进行过滤,即对1~100进行编译,然后再用 filter 对它们进行过滤,其中过滤的条件是传进 Int 之后,判断1~100中某个数字颠倒顺序过后是否和原来相同。

为了实现这个想法,这里使用了

{i.toString.equals(i.toString.reverse)} 这种方法, 先将 i  先转化成一个  String ,和它自己本身作对比,转换成 String 后再颠倒顺序看是否相等。

同时使用 .map(multiple) 做了一个映射,把元素 num 直接返回(这个操作并不是一定要做,这里可以不使用 map),然后使用 .filter(eq) 进行过滤,这样就可以得到需要的数据.

可以看到,这段代码使用了两种方法来完成“请找到1-100中,数字倒序排列和它本身相同的所有数”这个任务。

第一种是:

val viewSquares1 = (1 to 100)

.map(multiple)

.filter(eq)

这里没有使用 view ,直接使用了 map 。

第二种是:

val viewSquares2 = (1 to 100)

.view

.map(multiple)

.filter(eq)

这里使用了 view 。

创建一个名为 ViewDemo01 类型为 object 的文件夹,运行以下代码。

2.两种方法的区别。

(1)第一种:

object ViewDemo01 {

def main ( args :  Array [ String ]): Unit = {

def multiple ( num : Int ): Int = {

num

}

//如果这个数,逆序后和原来数相等,就返回 true ,否则就返回false

def eq ( i : Int ): Boolean = {

i . toString . equals ( i . toString . reverse )

}

//说明:没有使用 view ,常规方式

val viewSquares1 = (1 to 100)

. map ( multiple )

. filter ( eq )

println (viewSquares1)

首先, multiple 函数相当于一个原封不动的返回(它没有很大的意义,可以删除),然后进行一个判断,即如果这个数,逆序后和原来数相等,就返回 true ,否则就返回false (因为这里有 equals ,本身就会返回真和假),再对1~100进行filter 过滤操作。这是不使用 view 的方法也是最常规的用法。

(2)第二种:

如果使用 view ,来完成这个问题,此时需求会发生改变,即不需要先产生1,2,11...这些数据,需要的时候再给出。于是可以在原本基础上加上 view ,即:

val viewSquares2 =(1 to 100).view.filter(eq)

println (viewSquares2)

运行后可以看到,返回的是一个 seqViewF ,这也是一个集合,但是它里面没有数据(虽然做了工作,但是它认为目前还没有使用到里面的数据,于是不会进行计算,等到它认为你等需要数据的时候才会给出),如果需要返回得到数据,需要遍历,

即加上:

For (item <- viewSquares2) {

Println(“item=”+item)

}

执行后可以看到结果与预期效果大致相同。

下面再做一个测试来探讨使用 filter 是否也能出发,filter 执行, eq也应该执行,如果执行了说明把数据缓存了,如果没有执行,说明 filter 没有出发。

执行后可以看到, eq 没有被调用。也就是说,当在程序中对集合进行 map ,filter,reduce,ford 等操作时,是不希望立即执行的,而是在使用到结果时才执行,则可以使用 view 来进行优化。

从以上两种方法的区别对比,也可以看出, view 这种方法对我们的计算的影响。


三、对 View 的小结

1.对 View 的基本介绍

2.应用案例

相关文章
|
存储 XML NoSQL
KV 存储那些事儿
开发中,我们总会需要存储些 KV 数据,虽然看上去简单,但考虑因素也是很多的,实现手段也就各有差异。今天,我们就来看看 Android 目前有哪些 KV 库可以供我们使用,以及其有哪些优缺点。
618 0
|
机器学习/深度学习 人工智能 算法
掌握技术分享的艺术:如何有效传递专业知识
在当今信息爆炸的时代,技术性文章的撰写和分享成为了知识传播的重要途径。然而,技术性文章往往因为其专业性和复杂性让许多读者望而却步。本文将探讨如何通过清晰的结构、浅显的语言和生动的例子来提高技术性文章的可读性和吸引力,从而更有效地传递专业知识。
|
计算机视觉
OpenCV-矩形边框cv::boundingRect
OpenCV-矩形边框cv::boundingRect
292 0
|
前端开发 JavaScript 算法
React 渲染优化策略
【10月更文挑战第6天】React 是一个高效的 JavaScript 库,用于构建用户界面。本文从基础概念出发,深入探讨了 React 渲染优化的常见问题及解决方法,包括不必要的渲染、大量子组件的渲染、高频事件处理和大量列表渲染等问题,并提供了代码示例,帮助开发者提升应用性能。
221 6
|
存储 弹性计算 固态存储
阿里云服务器价格参考,2024最新收费标准与活动价格参考
同配置的阿里云服务器有多种实例规格可选,2024年,经济型e、通用算力型u1、计算型c7、计算型c8y、通用型g7和通用型g8y等实例2核4G、4核8G、8核16G、2核8G、4核16G、8核32等配置的云服务器有优惠,其中,通用算力型u1实例2核4G,5M固定带宽,80G ESSD Entry盘企业用户购买只要199元/1年,另外轻量应用服务器2核2G和2核4G配置也有优惠。下面是2024年截至目前阿里云服务器主要配置的最新活动价格及选择建议参考。
阿里云服务器价格参考,2024最新收费标准与活动价格参考
|
存储 缓存 编解码
C++ 音视频流媒体浅谈
C++ 音视频流媒体浅谈
400 0
C++ 音视频流媒体浅谈
|
数据库 开发者 Docker
深入浅出:使用Docker容器化改进Python应用部署
在当今快速迭代的软件开发周期中,确保应用能够在不同环境中一致运行成为了一个挑战。本文将探讨如何利用Docker容器技术,为Python应用提供一个轻量级、可复制的运行环境。我们将从Docker的基本概念入手,逐步深入到如何创建Dockerfile,构建镜像,以及如何运行和管理容器。此外,文章还将简要介绍如何使用Docker Compose来管理多容器应用。通过本文,读者将获得关于如何使用Docker容器技术来改进Python应用部署的全面理解。
343 3
|
编译器 索引 Python
Pandas之DataFrame,快速入门,迅速掌握(一)
Pandas之DataFrame,快速入门,迅速掌握(一)
892 0
|
消息中间件 Kubernetes Serverless
Serverless Kubernetes 开发实践:异构资源,按需使用
Kubernetes 作为当今云原生业界标准,具备良好的生态以及跨云厂商能力。Kubernetes 很好的抽象了 IaaS 资源交付标准,使得云资源交付变的越来越简单,与此同时用户期望更多的聚焦于业务自身,做到面向应用交付,Serverless 理念也因此而生。 那么如何通过原生 k8s 提供Serverless 能力?如何实现GPU等异构资源按需使用?这里给大家介绍一下我们在Serverless Kubernetes 开发实践:异构资源,按需使用。
774 0
Serverless Kubernetes 开发实践:异构资源,按需使用
MyBatisPlus-范围查询、模糊查询及排序查询
MyBatisPlus-范围查询、模糊查询及排序查询
972 0