[解決済み】Kotlinでコレクションを複数フィールドでソートする【重複あり
2022-03-26 13:38:08
質問
例えば、「人」のリストがあり、まず年齢でソートし、次に名前でソートする必要があるとします。
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
解決方法は?
sortedWith
+
compareBy
(ラムダのvarargを取る)がトリックです。
val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))
また、より簡潔な callable reference 構文も使用できます。
val sortedList = list.sortedWith(compareBy(Person::age, Person::name))
関連
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] KotlinのソースファイルからJavaのソースファイルへの変換方法
-
[解決済み] Kotlinのvarとvalの違いは何ですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlinで配列を値で初期化する方法は?
-
[解決済み】Kotlinのダブルバング(!)演算子とは?
-
[解決済み】Kotlinの文字列テンプレートでのフォーマット
-
[解決済み] Kotlinの複数変数let
-
[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?
-
[解決済み] KotlinでJavaのstatic finalフィールドに相当するものは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kotlinの静的メソッドと変数
-
[解決済み] Kotlin : インタフェース Queue のコンストラクタがない。
-
[解決済み] Kotlinの「?:」は何をするのか?(エルビス演算子)
-
[解決済み] KotlinのMutableListを空のMutableListに初期化するには?
-
[解決済み】「不適切なブロッキングメソッドの呼び出し」を適切にする方法は?
-
[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?
-
[解決済み] Kotlinで'by'キーワードは何をするのですか?
-
[解決済み] '変数'が変更可能なプロパティであるため、'型'へのスマートキャストは不可能である。
-
[解決済み] の警告を表示します。クラスパスのKotlinランタイムJARファイルは同じバージョンでなければならない
-
[解決済み] KotlinのArrayList<String>()とmutableListOf<String>()の相違点