java.util.Map.values()
は、値に基づいてキー値のペアを削除する意味がない場合、返されたコレクションからエントリを削除できるのはなぜですか?これを行うコードでは、削除される値(したがってキー)がどのキーからマップされているのか分かりません。特に値が重複している場合、そのCollectionでremoveを呼び出すと、予期しないキーが削除されます。java.util.Map.values()は、返されたコレクションからエントリを削除できる理由
答えて
それは、私はあなたが十分に想像力豊かであることだとは思わない値
に基づいて、キーと値のペアを削除しても意味がありません。私はおそらく幅広いが使用されていないことを認めますが、それが有用である有効な場合があります。
サンプルユースケースとして、Map<Person, TelephoneNumber>
がcontactList
となっていたとします。これでローカルにある連絡先リストをフィルタリングします。
これを達成するには、localContacts = new HashMap<>(contactList)
のコピーを作成し、TelephoneNumber
がローカルエリアコード以外の市外局番で始まるすべてのマッピングを削除することができます。これは、あなたがvalues
コレクションを反復処理し、値のいくつかを削除する有効な時間のようになります。
Map<Person, TelephoneNumber> contactList = getContactList();
Map<Person, TelephoneNumber> localContacts = new HashMap<Person, TelephoneNumber>(contactList);
for (Iterator<TelephoneNumber> valuesIt = localContacts.values().iterator(); valuesIt.hasNext();){
TelephoneNumber number = valuesIt.next();
if (!number.getAreaCode().equals(myAreaCode)) {
valuesIt.remove();
}
}
重複する値がある場合は特に、そのコレクションに削除呼び出すと、予期しないキービーイングにつながります除去された。
すべてののマッピングをその値で削除する場合はどうすればよいですか?
返されるCollection
は、特別なCollection
であり、そのセマンティクスは、それがどの値から来たものかを知るようなものです。 javadocは、返されたコレクションがサポートしている操作Collection
を示します。
remove
メソッドは、Collection
の一部である必要があります。それで、値を取り除くか、UnsupportedOperationException
を投げることを許可する選択肢があります。値を削除することが正当な理由があるので、なぜこの操作を許可しないのですか?
- はたぶん、あなたは
Map
からのすべてのインスタンス を削除する指定した値があります。 - 何らかの理由で のキーと値のペアが1つおきにトリムされることがあります。
- たぶん、あなたは、占有カウントにホテルからマップ 部屋番号を持っていて、中に滞在するために誰かのために部屋を見つける するために占有カウントが1より大きい マップからすべてを削除したい。
- あなたは より密接に考えてみれば...、 要するに
...このようなたくさんのより多くの例があります。これは有用であり、それは誰にも害はありません実装する可能性がある状況の多くが誰ですかそれを使用しないので、なぜですか?
キーに基づいて値を削除することは非常によくあると思います。他の答えは例を示しています。それで、ある価値を取り除きたいのであれば、なぜその中の特定の一つの鍵だけを削除したいのですか?たとえ削除しても、削除したいキーがあるかどうかを知っていなければならず、キーで削除する必要があります。
- 1. デシリアライズされたWKWebViewからURLが削除される理由
- 2. vb.net GetFilesから返されたコレクションからファイル名を削除するには
- 3. GetSystemPowerStatusExがWindows CE 5.0 SDKから削除された理由
- 4. データベースから対応するエントリを削除すると、物理ファイルをサーバから削除できますか?
- 5. BindingManagerBaseがバインディングから削除される理由
- 6. コレクションからコレクションを削除する
- 7. コレクションから削除
- 8. Androidエミュレータ何らかの理由でSDCardが削除されました
- 9. 関連する* .pyファイルが削除されたときに* .pycファイルが削除される理由
- 10. コレクションから削除する
- 11. Symfonyのarraycollectionロジックから削除されたエントリを削除するには?私のエンティティでのプレフラッシュ関数内
- 12. emberで削除されたレコードはコレクションから削除されていません
- 13. コレクションからコレクションを削除したときにEF6でデータベースからオブジェクトを削除するにはどうすればよいですか?
- 14. 1つのコレクションから削除されたアイテムは、暗黙的に2番目のコレクションからも削除されます。なぜですか?
- 15. Metro.call()経由でオブジェクトから削除されたメソッド
- 16. 削除されたエントリ(ソフト削除)と固有のバリデータ
- 17. 削除されたプロジェクトをTFSソース管理から削除する方法
- 18. jqueryで返されている理由とわからない理由
- 19. リストからエントリを削除する
- 20. LD_LIBRARY_PATHからエントリを削除する
- 21. プロパティファイルからエントリを削除する
- 22. Laravel app.jsとapp.cssを使用する理由私たちはそれらを削除できますか?
- 23. TensorFlowコレクションから削除
- 24. Observableコレクションからの削除
- 25. オブジェクトがコレクションから削除されたときに1つ以上のコレクションを更新するHibernate
- 26. 削除されたデータストアのエントリが再度表示される
- 27. FragmentManagerから重複したエントリを削除するには?
- 28. kuberneteクラスタで私のポッドが削除される理由のトラブルシューティング
- 29. レジストリキーを削除するとヌルが返されます - わからない理由
- 30. コレクションから要素を削除する
なぜそれが許されているのか、それはどうやって行われたのかという疑問があるようです。 – Kevin
@ケビン - 良い点。私はそのニュアンスを見逃しているようです:)この質問につまずいた人は、それが適切であると感じるかもしれないので、私はこの回答をとにかく残します。 – cdeszaq