2017-01-13 6 views
1

kotlinには、2行以下を1つに置き換えるメソッドはありますか?私は拡張機能を作成することができますが、すでにkotlinに存在するかどうかを知りたいと思っています。 listOfChecklist.clearAndAddAll()のようなものです。リストをクリアしてaddAllを単一のステートメントに入れるKotlin

listOfChecklist.clear() 
listOfChecklist.addAll(newList) 

これは私が手動で拡張機能を使用して行っていることです。しかし、もっと良い解決策があることを願っています。

fun <E> MutableCollection<E>.clearAndAddAll(replace: MutableSet<E>) { 
    clear() 
    addAll(replace) 
} 
+9

このような方法がないといいですね。 – miensol

+3

実際には関係ありませんが、['retainAll'](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/retain-all.html)という機能があります。他のコレクションに含まれていないアイテムは、欠落アイテムを追加しません。 – hotkey

+0

@ s1m0nw1このような方法はありません。代わりに上記のような拡張メソッドを使用することができます。 –

答えて

-1

newListから新しいインスタンスを作成することができます。

listOfChecklist = ArrayList(newlist) 
+0

私はリストを再度初期化したくありません。私はちょうど新しいもので置き換える全体のリストではなく、リスト内の項目を変更したい。 –

+0

その場合、拡張機能が最適です。 – Januson

3

これはできません。あなたのケースを解決するための慣用的な方法は、withのようなスコープ関数を使用することです。私はここで大きな利点が表示されません。

val list = mutableListOf<String>() 

with(list){ 
    clear() 
    addAll(arrayListOf()) 
} 
1

私の答えはそう、ここで、むしろ哲学的になります私の考えです:

  1. あなたが本当に1行のコードにこれらの2つの事業を統合する必要性を感じた場合、それはあなたが非常にこれを使用することをお勧めししばしば。

  2. このデザインパターンを頻繁に使用すると、アプリケーション/クラスの全体的なデザインにかなり間違っているように見えます。ここで私は完全に「そのような方法はないと思っています。 @miensol。

  3. 頻繁に使用しない場合は、2行のコードに残すと読みやすくなります。 「listOfChecklist = newlist」とブーム:「listOfChecklist」をクリア

  4. は「newlistは」そうでなければ、同じように参照を保持することができ、あまりにもいくつかの点でクリアされます場合にのみ意味があります!あなたは完了しました...

  5. 私は変更可能なリストを使用して、クリアされていて、それらの要素がお互いにコピーされている場合は、再び可変状態の過剰使用と思われます。あなたのコードを推論するのが難しくなります。私は明確な/ addAllの心配を完全に取り除くことになるいくつかのコア関数プログラミングの原則を見てみることをお勧めします:-)。

  6. 私はパフォーマンスのエキスパートではありませんが、ほとんどのユースケースでは、既存のリストを単純に複製するのではなく、既存のリストを再利用するという合理的なメリットはありません(実際には理由)とパフォーマンス自体について言えば、JVMはほとんどの場合常に優れた仕事をします。

結論:私は何を示唆していることは、あなたが本当にそれを必要とするか、またはあなたが完全にクリア/のaddAllの必要性を回避するような方法であなたのコードを設計する場合は、2行にそれを維持することです。それ以外の場合は、あなたの拡張機能や何かが幸せになるようにすることができます。

関連する問題