私はKotlinを初めて使用するので、MutableList<MyObject>
の注文について質問する必要があります。私が理解しているように、Int
とString
の両方に対してmyMutableList.sortBy {it.int}
とmyMutableList.sortByDescending {it.int}
を実行できます。ただし、戻り値は常にUnit
ではなくMutableList
です。
どこで問題が発生し、どうすればよいですか?
ミュータブルとは変更可能であることを意味します。したがって、sortBy
が新しいリストを返すのではなく、現在のリストのアイテムの順序が「インプレース」に変更されていることは理にかなっています。
myMutableList
の後にあるsortBy
の項目の順序を確認すると、要求された順序になっていることがわかります。
Kotlin関数 sort
、 sortBy
などはすべて、リスト自体のアイテムを並べ替えます。 sort
のドキュメントから:
要素の自然順序に従って配列をインプレースでソートします。
要素をインプレースで並べ替えるのではなく、並べ替えられたリストを返す場合(ベースがMutableList
である必要はありません)、 sorted
を使用できます。 、 sortedBy
など:
自然なソート順に従ってソートされたすべての要素のリストを返します。
リスト内のオブジェクトのプロパティでこのようなことができるので、文字列と数値を持つオブジェクトがあるとしましょう
data class MyObject(var name:String,var number:Int)
それにいくつかの値を追加します
val myObjectList: MutableList<MyObject>? = mutableListOf()
myObjectList!!.add(MyObject("C",3))
myObjectList.add(MyObject("B",1))
myObjectList.add(MyObject("A",2))
そして、あなたはそれをそのプロパティのいずれかでソートすることができます、それはソートされた値を持つ可変リストを返します
var sortedByName = myObjectList.sortedBy { myObject -> myObject.name }
var sortedByNumber = myObjectList.sortedBy { myObject -> myObject.number }
変更可能なリストをソートするには、以下を使用できます。
Collections.sort(myMutableList)
Collections.reverse(myMutableList) //To sort the list by descending order
また、kotlinでは、kotlinのstdlibコントラクト命令を使用でき、次のようになります。
myMutableList.sort()
myMutableList.reverse() //To sort the list by descending order
そして、myMutableList
を呼び出すと、次のように順序が変更されます。
val myMutableList = mutableListOf(8,5,4,6)
System.out.println("myMutableList: ${myMutableList[0]}")
myMutableList.sort()
System.out.println("myMutableList: ${myMutableList[0]}")
出力:
myMutableList: 8
myMutableList: 4