私はHashMapsについて学習しようとしていて、値の削除(この場合は場所)の助けを得ることを望んでいました。私は3つのHashMaps(perName、perCategory、perPosition)を持ち、そのうちの2つは値として場所のリストを持ち、すべてがキーとして文字列/位置を持っています。したがって、同じ名前またはカテゴリの異なる場所が存在する可能性があります。私はその場所が "マーク"されているかどうかに基づいて、各HashMapの値リストから特定の場所を削除したいと思います。Javaの値のリストでHashMapから値を削除するにはどうすればよいですか?
すべての追加された場所はすべてのHashMapsに格納され、マークされた場所は別のArrayListに格納されます。私は、ArrayListをループし、各HashMapから各場所/値を削除しようとしています。同じキーを持つ他のマークのない場所がある可能性があるので、キーを削除したくありません。これは可能ですか?現時点では、私はそれらを削除しようとすると消えるように見えません。
私は別の方法を試しましたが、反復子(不要かもしれない)がキー全体を削除するようですが、forループを持つものは何も削除しません。私がこれを解決するのに十分な情報を提供していないかどうか教えてください。ありがとうございました。
private Map<Position, Place> perPosition = new HashMap<>();
private Map<String, List<Place>> perCategory = new HashMap<>();
private Map<String, List<Place>> perName = new HashMap<>()
//method 1
Iterator<Place> it = markedPlace.iterator();
while (it.hasNext()) {
Place p = it.next();
perPosition.remove(p.getPosition());
perName.remove(p.getName());
perCategory.remove(p.getCategory());
p.setMarked(false);
p.setVisible(false);
it.remove();
}
//method 2
for (Place p : markedPlace) {
for (Map.Entry<String, List<Place>> entry : perName.entrySet()) {
if (entry.getValue().equals(p)) {
perName.remove(entry.getValue());
}
}
for (Map.Entry<String, List<Place>> entry : perCategory.entrySet()) {
if (entry.getValue().equals(p)) {
perCategory.remove(entry.getValue());
}
}
for (Map.Entry<Position, Place> entry : perPosition.entrySet()) {
if (entry.getValue().equals(p)) {
perName.remove(entry.getKey());
}
}
markedPlace.clear();