web-dev-qa-db-ja.com

KotlinのMutableListからデータを並べ替える

私はKotlinを初めて使用するので、MutableList<MyObject>の注文について質問する必要があります。私が理解しているように、IntStringの両方に対してmyMutableList.sortBy {it.int}myMutableList.sortByDescending {it.int}を実行できます。ただし、戻り値は常にUnitではなくMutableListです。

どこで問題が発生し、どうすればよいですか?

6
VTR2015

ミュータブルとは変更可能であることを意味します。したがって、sortByが新しいリストを返すのではなく、現在のリストのアイテムの順序が「インプレース」に変更されていることは理にかなっています。

myMutableListの後にあるsortByの項目の順序を確認すると、要求された順序になっていることがわかります。

12
weston

Kotlin関数 sortsortBy などはすべて、リスト自体のアイテムを並べ替えます。 sort のドキュメントから:

要素の自然順序に従って配列をインプレースでソートします。

要素をインプレースで並べ替えるのではなく、並べ替えられたリストを返す場合(ベースがMutableListである必要はありません)、 sortedを使用できます。sortedBy など:

自然なソート順に従ってソートされたすべての要素のリストを返します。

4
msrd0

リスト内のオブジェクトのプロパティでこのようなことができるので、文字列と数値を持つオブジェクトがあるとしましょう

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 }
1
Moises Orduno

変更可能なリストをソートするには、以下を使用できます。

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
0
Luca Murra