공식 core-ktx 라이브러리가 SparseArray 시리즈 및 Pair 개발에 어떤 편의를 가져올 수 있습니까?

이 기사는 core-ktx库的第三篇文章라이브러리의 어떤 도구 클래스 또는 메소드가 개발 효율성을 향상시킬 수 있는지 탐구하는 것을 목표로 하는 연구 관계자입니다.

처음 두 기사에 대한 참조 링크는 다음과 같습니다.

당신이 알아야 할 공식 core-ktx 라이브러리가 개발에 어떤 편의를 가져다 줄 수 있습니까?

공식 core-ktx 라이브러리가 서식 있는 텍스트 범위의 개발에 어떤 편리함을 가져다 줄 수 있습니까?

이 기사는 주로 시리즈 및 개발 코드 에 core-ktx대한 라이브러리 의 편의성을 연구합니다! !SparseArrayPair

SparseArray시리즈

SparseArray, 시리즈는 데이터 구조의 형태로 읽기와 쓰기를 지원 LongSparseArray하는 일종의 캡슐화 클래스이며 이에 비해 두 가지 점이 있습니다.key-valueHashMap

이미지.png

  1. 키 값 key은 기본 데이터 유형이며 기본 데이터 유형에 해당하는 래퍼 클래스가 아니므로 필요 없음装箱
  2. 데이터 구조는 캡슐화 를 기반 으로 한 다음 읽기 및 쓰기를 기반으로 하는 것과 달리 키 값 key의 배열과 값의 배열입니다.valueHashMapEntrykey-value

추신: Android에는 또 다른 컬렉션 시리즈가 있습니다 SparseIntArray. , SparseBooleanArray, SparseLongArray이 컬렉션은 더 강력하고 key和value都是基本数据类型, 권투가 필요하지 않으며, 위의 컬렉션과 혼동하지 마십시오. 그러나 이 두 컬렉션에서 제공하는 확장 패키지 core-ktx는 거의 동일하므로 개별적으로 설명하지 않습니다.

  1. SparseArray<T>.size()컬렉션 크기 가져오기

    이미지.png

    이것은 새로운 것이 아니라 SparseArray크기를 가져오는 원래 방법을 캡슐화한 것뿐입니다 size(). kotlin의 구문 설탕의 도움 으로 ( ) 로 属性호출 할 수 있습니다.本质上还是调用的方法

    private fun test5() {
        val sparseArray: SparseArray<String> = SparseArray<String>()
        val size = sparseArray.size
    }
    复制代码
  2. SparseArray<T>.contains(key: Int)판단에는 다음이 포함됩니다.key

    이미지.png

    이 메서드가 데코레이팅된 것을 볼 수 있습니다. 이 메서드 operator는 operator 오버로딩 메서드이고 operator 오버로드이며 in다음을 사용합니다.

    @RequiresApi(Build.VERSION_CODES.R)
    private fun test5() {
        val sparseArray: SparseArray<String> = SparseArray<String>()
        val isContain = 5 in sparseArray
    }
    复制代码

    不过这个api要求SDK>=30才能使用,我们可以直接将源码copy到项目工具类库中使用即可。

  3. SparseArray<T>.plus(other: SparseArray<T>)并合并两个集合为一个新集合

    이미지.png

    这也是一个运算符重载函数,重载了运算符+,项目中可以这样使用:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        val sparseArray2: SparseArray<String> = SparseArray<String>()
        val newArray = sparseArray1 + sparseArray2
    }
    复制代码
  4. SparseArray<T>.containsValue(value: T)判断是否存在指定value

    이미지.png

    这个和上面的contains方法类似,不过这个是判断某个value值是否在该集合中,同样也是重载了运算符in

  5. SparseArray<T>.set(key: Int, value: T)写入数据

    이미지.png

    重载了运算符[]的函数,可以这样向集合中写入数据:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1[10] = ""
    }
    复制代码
  6. SparseArray<T>.getOrDefault(key: Int, defaultValue: T)带默认值的读值

    이미지.png

    这个方法和HashMapgetOrDefault()类似,当获取的值为null时,就返回默认值:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.getOrDefault(10, "null")
    }
    复制代码
  7. SparseArray<T>.getOrElse(key: Int, defaultValue: () -> T)带默认函数类型返回值的读值

    이미지.png

    这个和上面的getOrDefault()比较像,只不过提供默认值的不再是一个固定的具体类型的值,而是一个灵活的函数类型,我们可以在这个函数类型中进行额外的逻辑编写:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.getOrElse(10) {
            val tmp = "哈哈哈${sparseArray1.size}"
            tmp
        }
    } 
    复制代码
  8. SparseArray<T>.isEmpty()判断集合是否为空的

    이미지.png

  9. SparseArray<T>.remove(key: Int, value: T)移除指定key-value

    이미지.png

  10. SparseArray<T>.forEach(action: (key: Int, value: T) -> Unit)遍历

    이미지.png

    使用:

    
    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        sparseArray1.forEach { key, value ->
            //执行操作
        }
    }
    复制代码
  11. SparseArray<T>.keyIterator()遍历键值key

    이미지.png

    这个方法会返回一个迭代器,这样我们就可以使用for in来遍历键值key了:

    private fun test5() {
        val sparseArray1: SparseArray<String> = SparseArray<String>()
        for (key in sparseArray1.keyIterator()) {
            //执行操作
        }
    }
    复制代码

    自定义迭代器就可以帮助我们实现通过for in关键字遍历,具体的可以参考我之前写的一篇文章:你需要懂的Kotlin开发技巧之八#运算符重载for in

  12. SparseArray<T>.valueIterator()遍历value

    이미지.png

    使用起来和上面的keyIterator()方法类似。

Pair<F, S>系列

  1. componentX()解构

    이미지.png

    这也是一个operator修饰的运算符重载函数,关于这个解构,我不太该怎么去用语言来描述,大家直接看下使用吧:

    private fun test6() {
        val pair = Pair(10, "ha")
        val (key, value) = pair
    }
    复制代码

    就是可以直接将这个对象的内部属性赋值给局部声明的变量,如果你只使用key或value,可以将不想要解构的属性使用_代替: val (key , _) = pair //只使用key

    이 구조의 확장 메서드는 특별히 객체 Java(android 및 androidX 패키지 포함) 에 제공 되며 선언된 객체가 하나 이기 때문에 직접 구현할 필요가 없으며 기본적으로 구조화 메서드를 생성합니다. :PairKotlinPairPairdata classdata class

    이미지.png

    componentX()생성된 일련의 메소드 를 보려면 Java 코드로 디컴파일하십시오 .

  2. javakotlin로의 Pair변환 _

  • toKotlinPair개체 androidx包개체 변환PairKotlinPair

    이미지.png

  • toAndroidXPair개체 kotlin개체 변환Pairandroidx包Pair

    이미지.png

  • toKotlinPair개체 android包개체 변환PairKotlinPair

    이미지.png

  • toAndroidPair개체 kotlin개체 변환Pairandroid包Pair

    이미지.png

요약하다

자세한 소스코드 core-ktx는 패키지 아래 SparseArray.kt, , Pair.kt, 등 SparseXXXArray.kt파일 의 소스코드를 참조하시기 바랍니다. core-ktx다음 으로 graphics패키지 View(많은 카테고리) 에서 작업을 위한 몇 가지 확장 도구를 연구할 준비가 되었습니다 .

이미지.png
그것이 우리의 공동 View개발에 어떤 편리함을 가져다줄 수 있는지 살펴보십시오. 계속 지켜봐 주십시오! !

Nuggets Technology Community의 작성자 서명 프로그램 모집에 참여하고 있습니다. 링크를 클릭하여 등록하고 제출 하십시오.

рекомендация

отjuejin.im/post/7118765812105609230