【Kotlin】Sequence简介
1 前言
序列(Sequence)是 Kotlin 中为方便操作集合及其元素而定制的接口,是一个延迟获取数据的集合,只有需要元素时才会生产元素。在处理大量数据时,序列可以显著地提升性能。
Sequence 类似 Java 中的 Stream,详见 → Stream 总结。Sequence 有中间操作和终端操作,如下。
- 中间操作:每次操作返回一个新的 Sequence 对象(主要操作有:filter、distinct、drop、take、sorted、sortedDescending、map、mapIndexed、minus 等)。
- 终端操作:每次操作返回一个值或集合,每个序列只能进行一次终端操作(主要操作有:forEach、joinToString、min、max、count、sum、average、any、first、last、reduce 等)。
2 Sequence 的创建
2.1 sequenceOf
var sequence = sequenceOf(1, 2, 3)
2.2 asSequence
1)IntRange
var intRange = 1..10
var sequence = intRange.asSequence()
2)Array
var array = arrayOf(1, 2, 3)
var sequence = array.asSequence()
3)List
var list = listOf("AA", "BBB", "CC")
var sequence = list.asSequence()
4)Set
var set = setOf("AA", "BBB", "CC")
var sequence = set.asSequence()
2.3 BufferedReader
val reader = BufferedReader(FileReader("G:\\stream.txt"))
val sequence = reader.lineSequence()
2.4 generateSequence
var sequence = generateSequence(arrayOf(1, 1)) { arr ->arrayOf(arr[1], arr[0] + arr[1])}.take(10).map { arr -> arr[0] }
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
println(sequence.joinToString())
3 Sequence 的中间操作
3.1 主要接口
// 过滤
public fun <T> Sequence<T>.filter(predicate: (T) -> Boolean): Sequence<T>
// 去重
public fun <T> Sequence<T>.distinct(): Sequence<T>
// 丢弃前 n 个元素
public fun <T> Sequence<T>.drop(n: Int): Sequence<T>
// 截取前 n 个元素
public fun <T> Sequence<T>.take(n: Int): Sequence<T>
// 排序(升序)
public fun <T : Comparable<T>> Sequence<T>.sorted(): Sequence<T>
// 排序(降序)
public fun <T : Comparable<T>> Sequence<T>.sortedDescending(): Sequence<T>
// 映射(T -> R)
public fun <T, R> Sequence<T>.map(transform: (T) -> R): Sequence<R>
// 映射(index, T -> R)
public fun <T, R> Sequence<T>.mapIndexed(transform: (index: Int, T) -> R): Sequence<R>
// 删除序列中第一个 element
public operator fun <T> Sequence<T>.minus(element: T): Sequence<T>
3.2 案例
fun main() {var sequence = sequenceOf(4, 9, 1, 8, 5, 5, 7, 3, 6, 2)sequence.filter { e -> e > 2 && e < 8 } // 4 5 5 7 3 6.distinct() // 4 5 7 3 6.drop(1) // 5 7 3 6.take(3) // 5 7 3.sorted() // 3 5 7.map { e -> e * e } // 9 25 49.forEach(::println)
}
4 Sequence 的终端操作
4.1 主要接口
1)统计函数
// 最小值
public fun <T : Comparable<T>> Sequence<T>.min(): T?
// 最大值
public fun <T : Comparable<T>> Sequence<T>.max(): T?
// 元素个数
public fun <T> Sequence<T>.count(): Int
// 求和
public fun Sequence<Int>.sum(): Int
// 求平均值
public fun Sequence<Int>.average(): Double
// 序列中是否有元素
public fun <T> Sequence<T>.any(): Boolean
// 获取第一个元素
public fun <T> Sequence<T>.first(): T
// 获取最后一个元素
public fun <T> Sequence<T>.last(): T
2)遍历元素
// 遍历元素
public inline fun <T> Sequence<T>.forEach(action: (T) -> Unit): Unit
3)拼接元素
// 转换为字符串
public fun <T> Sequence<T>.joinToString(separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = "", limit: Int = -1, truncated: CharSequence = "...", transform: ((T) -> CharSequence)? = null): String
4)规约运算
// 规约运算,定义运算 o, result = ((((e1 o e2)) o e3) o e4) o ...
public inline fun <S, T : S> Sequence<T>.reduce(operation: (acc: S, T) -> S): S
5)集合转换
public fun <T> Sequence<T>.toList(): List<T>
public fun <T> Sequence<T>.toMutableList(): MutableList<T>
public fun <T> Sequence<T>.toSet(): Set<T>
public fun <T> Sequence<T>.toMutableSet(): MutableSet<T>
public fun <T> Sequence<T>.toHashSet(): HashSet<T>
public fun <T : Comparable<T>> Sequence<T>.toSortedSet(): java.util.SortedSet<T>
4.2 案例
1)统计函数
fun main() {var sequence = sequenceOf(1, 3, 5)var min = sequence.min() // 1var max = sequence.max() // 5var count = sequence.count() // 3var sum = sequence.sum() // 9var avg = sequence.average() // 3var hasElement = sequence.any() // truevar first = sequence.first() // 1var last = sequence.last() // 5
}
2)遍历元素
fun main() {var sequence = sequenceOf(1, 3, 5)sequence.forEach(::println) // 1、3、5
}
3)拼接元素
fun main() {var sequence = sequenceOf(1, 3, 5)var str = sequence.joinToString(",", "[", "]")
}
4)规约运算
fun main() {var sequence = sequenceOf(1, 3, 5)var sum = sequence.reduce(Integer::sum) // 9// 1*1-3*3=-8, (-8)*(-8)-5*5=39var res = sequence.reduce { e1, e2 -> e1 * e1 - e2 * e2 } // 39
}
5)集合转换
fun main() {val sequence = sequenceOf(1, 2, 3)var list = sequence.toList()var mutableList = sequence.toMutableList()var set = sequence.toSet()var mutableSet = sequence.toMutableSet()var hashSet = sequence.toHashSet()var sortedSet = sequence.toSortedSet()
}相关文章:
【Kotlin】Sequence简介
1 前言 序列(Sequence)是 Kotlin 中为方便操作集合及其元素而定制的接口,是一个延迟获取数据的集合,只有需要元素时才会生产元素。在处理大量数据时,序列可以显著地提升性能。 Sequence 类似 Java 中的 Stream…...
【Java】Thread详解
🍒前言 本文将从以下几方面来展开对Thread的介绍。 1.线程创建 2.线程中断 3.线程等待 4.线程休眠 在前面的文章中,已经总结了关于Thread的一些理解。 在阅读本文之前,最好对其有一些基础的了解。 文章链接: 【JavaSE】进程是什么?…...
QT TCP和UDP网络编程
代表网络概念的QTcpSocket,QTcpServer和QUdpSocket,以及QNetworkRequest,QNetworkReply和QNetworkAccessManager之类的高级类来执行使用通用协议的网络操作。 它还提供了QNetworkConfiguration,QNetworkConfigurationManager和QNetworkSession等,实现承载…...
Maven入门指南:构建与管理Java项目的利器
引言 在Java开发领域,项目构建和管理是一个至关重要的环节。随着项目规模和复杂度的不断增加,有效地管理项目的依赖、构建过程以及部署流程变得尤为关键。在这样的背景下,Apache Maven作为一款优秀的项目管理工具应运而生,成为了…...
EXCEL-VB编程实现自动抓取多工作簿多工作表中的单元格数据
一、VB编程基础 1、 EXCEL文件启动宏设置 文件-选项-信任中心-信任中心设置-宏设置-启用所有宏 汇总文件保存必须以宏启动工作簿格式类型进行保存 2、 VB编程界面与入门 参考收藏 https://blog.csdn.net/O_MMMM_O/article/details/107260402?spm1001.2014.3001.5506 二、…...
用Vue仿了一个类似抖音的App
大家好,我是 Java陈序员。 今天,给大家介绍一个基于 Vue3 实现的高仿抖音开源项目。 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 douyin —— 一个基于 Vue、Vite 实…...
HarmonyOS 应用开发之非线性容器
非线性容器实现能快速查找的数据结构,其底层通过hash或者红黑树实现,包括HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray七种。非线性容器中的key及value的类型均满足ECMA标准。 HashMap HashMap 可用来存储具有关联…...
Golang Context是什么
一、这篇文章我们简要讨论Golang的Context有什么用 1、首先说一下Context的基本作用,然后在讨论他的实现 (1)数据传递,子Context只能看到自己的和父Context的数据,子Context是不能看到孙Context添加的数据。 (2)父子协程的协同,比…...
算法基础--递推
😀前言 递推算法在计算机科学中扮演着重要的角色。通过递推,我们可以根据已知的初始条件,通过一定的规则推导出后续的结果,从而解决各种实际问题。本文将介绍递推算法的基础知识,并通过一些入门例题来帮助读者更好地理…...
超市销售数据-python数据分析项目
Python数据分析项目-基于Python的销售数据分析项目 文章目录 Python数据分析项目-基于Python的销售数据分析项目项目介绍数据分析结果导出数据查阅 数据分析内容哪些类别比较畅销?哪些商品比较畅销?不同门店的销售额占比哪个时间段是超市的客流高封期?查看源数据类型计算本月…...
java实现手机号,密码,游邮箱 , 验证码的正则匹配工具类
先定义一个抽象类RegexPatterns,定义相关正则字符串 : public abstract class RegexPatterns {/*** 手机号正则*/public static final String PHONE_REGEX "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";/*** 邮箱正则*/public stat…...
java中的Arrays类的常用操作
Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。 import java.util.Arrays; Arrays.sort(arr); int index Arrays.binarySearch(arr, 3); boolean isEqual Arrays.equals(arr1, arr2); // isEqual为true int[] arrnew int[5]; Arrays.fill(arr, 7)…...
回溯算法|78.子集
力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex) {result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自…...
VC++、GCC、CLANG,INT128有符号整数编译器关键字
注意INT128为目标平台扩展关键字,不属于C/C语言本身支持特性,每个C/C编译器平台支持上都略有不同,甚至不支持。 可以详细参考本人此篇文章: GUN C/C (GCC/CLANG) 对于 __int128_t (128位有符号大整数的扩展支持平台限…...
用于HUD平视显示器的控制芯片:S2D13V40
一款利用汽车抬头显示技术用于HUD平视显示器的控制芯片:S2D13V40。HUD的全称是Head Up Display,即平视显示器,以前应用于军用飞机上,旨在降低飞行员需要低头查看仪表的频率。起初,HUD通过光学原理,将驾驶相关的信息投射…...
JSP使用模板字符串数据不能渲染的问题
entrap father 的 rubbish JSP 数据不能直接渲染,要从接口请求后去拼接结构 然后模板字符串不能直接用 用以下方法是不能渲染出数据的 let div <div class"circulation"><div class"list"><div class"left"><div class&qu…...
AI音乐GPT时刻来临:Suno 快速入门手册!
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
数字乡村发展蓝图:科技赋能农村实现全面振兴
目录 一、数字乡村发展蓝图的内涵与目标 二、科技赋能农村:数字乡村发展的动力与路径 (一)加强农业科技创新,提升农业生产效率 (二)推进农村电商发展,拓宽农民增收渠道 (三&…...
Day42 动态规划 part04
Day42 动态规划 part04 46. 携带研究材料(卡哥的卡码网的题目) 背包问题 我的思路: 写不了一点儿…T^T 总结规律就是,dp数组要比原来各个size 1,dp[i][j] Math.max(xxx, xxxx(根据题目情况进行各种处理)) 解答: …...
python set是什么类型
python set是一种数据类型,数学里的集合概念,在Python语言里对应的是set类型。与list,tuple不同的地方是,set更加强调的是一种“从属关系”(membership),跟顺序无关,所以有重复的元素…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
