Kotlin で複数のフィールドでコレクションを並べ替える [重複] 質問する

Kotlin で複数のフィールドでコレクションを並べ替える [重複] 質問する

まず年齢で並べ替え、次に名前で並べ替える必要がある人々のリストがあるとします。

C# の経験から、LINQ を使用することで、この言語でこれを簡単に実現できます。

var list=new List<Person>();
list.Add(new Person(25, "Tom"));
list.Add(new Person(25, "Dave"));
list.Add(new Person(20, "Kate"));
list.Add(new Person(20, "Alice"));

//will produce: Alice, Kate, Dave, Tom
var sortedList=list.OrderBy(person => person.Age).ThenBy(person => person.Name).ToList(); 

Kotlin を使用してこれをどのように実現するのでしょうか?

これは私が試したことです (最初の「sortedBy」句の出力が 2 番目の句によって上書きされ、名前のみでソートされたリストが生成されるため、明らかに間違っています)

val sortedList = ArrayList(list.sortedBy { it.age }.sortedBy { it.name })) //wrong

ベストアンサー1

sortedWith+compareBy(ラムダの可変引数を取る) 次のようにすればうまくいきます:

val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))

より簡潔な呼び出し可能参照構文を使用することもできます。

val sortedList = list.sortedWith(compareBy(Person::age, Person::name))

おすすめ記事