Kotlin中的集合介紹
好的,本節我們繼續來搞Kotlin,這節要搞的是: Kotlin中的集合與它的操作符們集合在我們實際開發中用的還是比較頻繁的,Kotlin中的集合不同於Java中的集合,Kotlin中的集合根據“是否可變”,分為兩派:可變集合與不可變集合,而後者是在前者的前面加上了 Mutable :
列表:List/MutableList; 集:Set/MutableSet; 對映:Map/MutableMap; 集:Collection/MutableCollection; 迭代器:Iterable/MutableIterable;關於可變不可變,其實看看這些類提供的方法就知道了(提供的讀寫相關的方法)我們可以開啟kotlin-runtime-sources.jar
首先是:Iterable介面,兩個介面中都只有一個iterator()方法:
改方法返回一個Iterator,我們到Iterator.kt裡看看,定義了四個介面,以及對應的方法,這就是當我們對集合進行迴圈迭代遍歷時可供呼叫的一些方法!
接著看回Collections.kt,可以看到 Collection 和 MutableCollection給我們提供的方法:
再接著是實現了Collection介面的 List
而 Map 則是:,然後提供的方法與引數如下:
整個檔案的大概結構就是這樣,方法也不細講了,都是見名知意的!
2.建立集合
List
Set
Map
這的鍵值對用 to 關鍵字,key to value!
3.強勢的集合操作符們
Kotlin中關於集合的操作符有六類:
總數操作符 過濾操作符 對映操作符 順序操作符 生產操作符 元素操作符下面我們一一來對這些操作符進行講解!
1)總數操作符
any —— 判斷集合中 是否有滿足條件 的元素; all —— 判斷集合中的元素 是否都滿足條件; none —— 判斷集合中是否 都不滿足條件,是則返回true; count —— 查詢集合中 滿足條件 的 元素個數; reduce —— 從 第一項到最後一項進行累計 ; reduceRight —— 從 最後一下到第一項進行累計; fold —— 與reduce類似,不過有初始值,而不是從0開始累計; foldRight —— 和reduceRight類似,有初始值,不是從0開始累計; forEach —— 迴圈遍歷元素,元素是it,可對每個元素進行相關操作; forEachIndexed —— 迴圈遍歷元素,同時得到元素index(下標); max —— 查詢最大的元素,如果沒有則返回null; maxBy —— 獲取方法處理後返回結果最大值對應的那個元素的初始值,如果沒有則返回null; min —— 查詢最小的元素,如果沒有則返回null; minBy —— 獲取方法處理後返回結果最小值對應那個元素的初始值,如果沒有則返回null; sumBy —— 獲取 方法處理後返回結果值 的 總和; dropWhile —— 返回從第一項起,去掉滿足條件的元素,直到不滿足條件的一項為止
使用示例:
結果:
2)過濾操作符
見名知意,通過 某個條件 來對集合中的元素進行過濾,取其精華去其糟粕~
PS:過濾後會返回一個處理後的列表結果,但不會改變原列表!!!
filter —— 過濾 掉所有 滿足條件 的元素 filterNot —— 過濾所有不滿足條件的元素 filterNotNull —— 過濾NULL take —— 返回從第一個開始的n個元素 takeLast —— 返回從最後一個開始的n個元素 takeWhile —— 返回不滿足條件的下標前面的所有元素的集合 drop —— 返回 去掉前N個元素後 的列表 dropLastWhile —— 返回從最後一項起,去掉滿足條件的元素,直到不滿足條件的一項為止 slice —— 過濾掉 非指定下標 的元素,即保留下標對應的元素過濾list中
指定下標的元素(比如這裡只保留下標為1,3,4的元素)
使用示例:
結果:
3)對映操作符
這裡的話,因為操作符只有五個,就不一個個分開了,直接解釋一波後,
貼程式碼和執行結果~
map —— 將集合中的元素通過某個 方法轉換 後的結果存到一個集合中; mapIndexed —— 除了得到 轉換後的結果 ,還可以拿到Index(下標); mapNotNull —— 執行方法 轉換前過濾掉 為 NULL 的元素 flatMap —— 合併兩個集合,可以在合併的時候做些小動作; groupBy —— 將集合中的元素按照某個條件分組,返回Map;
使用示例:
結果:
4)順序操作符
同樣,操作符也不多,只有五個,都是和元素排序相關的!
reversed —— 相反順序 sorted —— 自然排序(升序) sortedBy —— 根據方法處理結果進行自然(升序)排序 sortedDescending —— 降序排序 sortedByDescending —— 根據方法處理結果進行降序排序
使用示例:
結果:
5)生產操作符
生產操作符只有四個,不是五個,看到網上相關的都說有五個,還有一個是:merge,
作用是:把兩個集合,按照相同下標,合成新的元素,合成的集合大小由最小的集合決定!
然而,這個方法在Kotlin 1.0 Beta 2後的版本,就棄用了這個操作符,具體可見:傳送門
當然有替代方案,可以使用 zip 操作符來實現這個功能!示例程式碼會給出~
另外,這節的操作符涉及到一個 Pair 的類,該類是Kotlin提供的用來處理雙元對資料的,
可以理解成Map中的一個鍵值對,比如Pair(“key”,”value”) 等價於 “key” to “value”
zip —— 兩個集合按照下標組合成一個個的Pair塞到集合中返回 partition —— 根據判斷條件是否成立,拆分成兩個 Pair plus —— 合併兩個List,可以用”+”替代 unzip —— 將包含多個Pair的List 轉換成 含List的Pair
使用示例:
結果:
6)元素操作符
contains —— 判斷集合中是否有指定元素,有返回true elementAt —— 查詢下標對應的元素,如果下標越界會拋IndexOutOfBoundsException elementAtOrElse —— 查詢下標對應元素,如果越界會根據方法返回預設值(最大下標經方法後的值) elementAtOrNull —— 查詢下標對應元素,越界會返回Null first —— 返回符合條件的第一個元素,沒有 拋NoSuchElementException firstOrNull —— 返回符合條件的第一個元素,沒有 返回null indexOf —— 返回指定下標的元素,沒有 返回-1indexOfFirst —— 返回第一個符合條件的元素下標,沒有 返回-1 indexOfLast —— 返回最後一個符合條件的元素下標,沒有 返回-1 last —— 返回符合條件的最後一個元素,沒有 拋NoSuchElementException lastIndexOf —— 返回符合條件的最後一個元素,沒有 返回-1 lastOrNull —— 返回符合條件的最後一個元素,沒有 返回nullsingle —— 返回符合條件的單個元素,如有沒有符合或超過一個,拋異常singleOrNull —— 返回符合條件的單個元素,如有沒有符合或超過一個,返回null
使用示例
結果:
相關推薦
Kotlin開發五 Kotlin中集合常用函式式API
在kotlin中有一些常用的對集合進行操作的函式式API,掌握他們可以大大提高程式設計效率,這些API與java8中的 Stream API類似。下面主要講解以下幾大類 1 filter 和 map filter主要用作過濾器(對集合元素),它的返回值也是一個集
Kotlin中的集合介紹
好的,本節我們繼續來搞Kotlin,這節要搞的是: Kotlin中的集合與它的操作符們集合在我們實際開發中用的還是比較頻繁的,Kotlin中的集合不同於Java中的集合,Kotlin中的集合根據“是否可變”,分為兩派:可變集合與不可變集合,而後者是在前者的前面加上了 Mu
Kotlin中常用集合的使用
集合在程式中的比例的很重的,Kotlin針對集合進行了更加簡潔和有效的封裝,這邊文章就簡單的介紹一下list,map,set這三個最常用集合的使用。 首先在Kotlin中,明確區分了集合的只讀和可變。 Iterable介面聲明瞭Kotlin中集合的通用方法,是最基本的介面。 Mutabl
Java中的集合介紹
一、基本介紹 1、結構圖 2、新增物件 向集合中新增的員工物件:Clerk //建立一個員工類 public class Clerk { private String name;//姓名 private int age;//年齡 pri
集合類父介面中方法的使用介紹 以及不可修改長度與不可修改的兩個集合介紹
/** * Created by likai on 2018/11/29. * 集合類父介面中方法的使用介紹 以及不可修改長度與不可修改的兩個集合介紹 */ public class Test1 { public static void test(String msg, List
Kotlin中常用操作符和用法介紹
?操作符表示這個物件可能為空//在變數型別後面加上問號,代表該變數是可空變數 var name: String? = "zhangsan" /** * 如果str不能轉為Int型別,則返回null */ fun parseInt(str: String): Int?
Kotlin中的集合(Collection)
集合型別 Array(陣列) 有序可重複,索引從0開始 大小固定,元素型別不可變 定義:Array<泛型>(size,init)或者arrayOf(元素1,元素2,…,元素n) 通過兩種方式定義陣列 //定義一個數組,有型別推斷,也
[譯]Kotlin中是應該使用序列(Sequences)還是集合(Lists)?
翻譯說明: 原標題: Sequences — a Pragmatic Approach 序列(Sequences) 是一個很棒的工具,它有一些不同於Android開發人員習慣的處理資料集合的方法。在我之前的文章中,我比較了各種操作集合的方式,現在我想
C#中集合ArrayList與Hashtable的使用
mov eat 重新 hashtable table bject remove 第一個 循環 C#中集合ArrayList與Hashtable的使用 http://blog.csdn.net/linukey/article/details/42506819 ArrayL
Java中集合類容器初步了解
equals treemap 輸入 strong 字符串數組 通過 system 結構 shm 容器(Collection) 數組是一種容器,集合也是一種容器 java編程中, 裝其他各種各樣的對象(引用類型)的一種東西, 叫容器 (圖書
Python中集合(set)的基本操作以及一些常見的用法
python set 集合 集合的一些常見用法 Python除了List、Tuple、Dict等常用數據類型外,還有一種數據類型叫做集合(set),集合的最大特點是:集合裏邊的元素是不可重復的並且集合內的元素還是無序的,所以一般情況下集合常用的兩個場景是:1.去重(如:列表去重);2.關
java中集合的擴容
map art 列表 eset ont 實現 ava 大小 ash 對於Java中的各種集合類,根據底層的具體實現,小結了一下大致有3種擴容的方式: 1、對於以散列表為底層數據結構實現的,(譬如hashset,hashmap,hashtable等),擴容方式為當鏈表數組的
spring---aop(6)---Spring AOP中ProxyFactoryBean介紹
except trace col fine erl 參數 owa per face 寫在前面 這篇文章裏面就要說說Spring自己的AOP,搞清楚哪種方式是Spring自己實現的AOP,哪種方式是Spring引入aspectj的AOP。 簡單例子 Spring
Java中集合概念
code 速度慢 boolean his 都是 結合 rem [] 特點 1.集合是儲存對象的,長度可變,可以封裝不同的對象 2.叠代器: 其實就是取出元素的方式(只能判斷,取出,移除,無法增加) 就是把取出方式定義在集合內部,這樣取出方式就
Java中集合(List,Set,Map)
比例 正在 earch iterator 試圖 tor 元素 除了 一個 ArrayList 和Vector是采用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要設計到數組元素移動等內存操作,所以索引數據快插入數據慢
JS中集合對象(Array、Map、Set)及類數組對象的使用與對比
new item 是否 匹配 全局搜索 用法 self star 刪除 原文地址 在使用js編程的時候,常常會用到集合對象,集合對象其實是一種泛型,在js中沒有明確的規定其內元素的類型,但在強類型語言譬如Java中泛型強制要求指定類型。 ES6引入了iterable類
python之路_day70_django中cookie介紹
其中 模板語言 請求 tabpanel role pytho con sed signed 一、django模板系統 1、母板 為其他子模板文件所共有的內容文件,各子模板的不同部分通過模板語言占位。註意:我們通常會在母板中定義頁面專用的CSS塊和JS塊,方便子頁面替換,
Django中ORM介紹和字段及字段參數
時也 特殊 nothing duration sys cal 概念 目錄 gre Object Relational Mapping(ORM) ORM介紹 ORM概念 對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向
.Net中集合排序還可以這麽玩
true ora 表達式 str nbsp static gen AS pan 背景: public class StockQuantity { public StockQuantity(string status, DateTime da
C++中STL介紹
沒有 添加數據 pan swap ring 不同之處 結果 allocator 新的 轉載自:https://blog.csdn.net/hhu1506010220/article/details/51971642 介紹 這篇文章的目的是為了介紹std::vector,如何