<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 根據學生性別進行分組:groupBy 有時候我們需要對列表中的元素進行分組。以這個人列表為例,我們可能需要按照元素的不同特征來對列表進行分組(比如按照性別、分數、年齡等特征進行分組),分組之后的集合是一個Map。如果我們用傳統的思路來實現這一操作的話,我們或許會這么去做(比如要按照性別進行分組): ``` fun groupBySex (students: List<Student>): Map<String, List<Student>> { val mStudents = ArrayList<Student>() // 定義男學生列表 var fStudents = ArrayList<Student>() // 定義女學生列表 //遍歷學生列表 for (student in students) { if(student.sex == "m"){ mStudents.add(student) } else if(student.sex == "f") { fStudents.add(student) } } return mapOf("m" to mStudents, "f" to fStudents) } ``` 上面是傳統的分組的代碼,可以看到比較煩瑣,還要定義許多中間變量,且容易出錯。 好在Kotlin給我們提供了一個groupBy方法。那么如果要對人列表中的元素按照性別進行分組的話,我們就可以這樣去做(緊接著filter函數章節的person數據類): ~~~ val mPersonsMap = persons.groupBy { it.sex } println(mPersonsMap) ~~~ 輸出結果: ``` {m=[PersonData(name=Jilen, age=30, sex=m, score=85), PersonData(name=Shaw, age=18, sex=m, score=90), PersonData(name=Jack, age=30, sex=m, score=70)], f=[PersonData(name=Yison, age=40, sex=f, score=59), PersonData(name=Lisa, age=25, sex=f, score=88), PersonData(name=Pan, age=36, sex=f, score=55)]} ``` 可以看到,使用groupBy方法很容易就能就得到我們想要的結果。該數據結構的類型為`Map<String, List<Person>>`,其中有兩個分組,一個是性別男對應的分組,一個是性別女對應的分組。 我們再來看另外一個例子,如何使用成員引用把字符串按照首字母分組: ``` fun main(args: Array<String>) { val list = listOf("a", "ab", "b") println(list.groupBy(String::first))//{a=[a, ab], b=[b]} } ``` >[info]注意,這里first 并不是String 類的成員,而是一個擴展。然而,可以把它當作成員引用訪問。 #### groupBy源碼 ~~~ public inline fun <T, K> Iterable<T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> { return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector) } ~~~ ~~~ public inline fun <T, K, M : MutableMap<in K, MutableList<T>>> Iterable<T>.groupByTo(destination: M, keySelector: (T) -> K): M { for (element in this) { val key = keySelector(element) val list = destination.getOrPut(key) { ArrayList<T>() } list.add(element) } return destination } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看