値またはキーを使用した反復を使用せずに、 Java からエントリを削除するにはどうすればよいですか。Map
基本的に私のマップでは、それを削除するためにcontainsKey()
thenを使用しています。map.remove()
9 に答える
削除したい要素のキーを使用して、マップからエントリを削除します。
map.remove("aKey");
要素のキーがわからない場合は、次のように反復して取得する必要があります。
public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
Set<T> keys = new HashSet<T>();
for (Entry<T, E> entry : map.entrySet()) {
if (value.equals(entry.getValue())) {
keys.add(entry.getKey());
}
}
return keys;
}
これにより、マップ上で見つかったすべてのキーが返されます。
Map<Integer, String> abcMap = new HashMap<Integer, String>();
abcMap.put(1,"A");
abcMap.put(2,"B");
abcMap.put(3,"C");
/// now for remove item
abcMap.remove(1);
// this will remove "A" from abcMap..
public V remove(Object key)
このキーのマッピングが存在する場合、このマップからこのキーのマッピングを削除します (オプションの操作)。より正式には、このマップに のようなキー k から値 v へのマッピングが含まれている場合
(key==null ? k==null : key.equals(k))
、そのマッピングは削除されます。(マップには、そのようなマッピングを最大 1 つ含めることができます。)マップが以前にキーに関連付けた値、またはマップにこのキーのマッピングが含まれていない場合は null を返します。(実装が null 値をサポートしている場合、null 戻り値は、マップが以前に指定されたキーに null を関連付けていたことを示すこともできます。) 呼び出しが戻ると、マップには指定されたキーのマッピングが含まれなくなります。
基本的に、キーが存在しなくても remove を呼び出すことができます。その場合、暗黙のうちに失敗します (null を返します)。yourKey.equals(key)
削除するキーが true の場合、オブジェクトは同一または同じである必要はありません。
public Object remove(Object key)
remove
方法でMap
。
javadocから:
このキーのマッピングが存在する場合、このマップからこのキーのマッピングを削除します (オプションの操作)。より正式には、このマップにキー k から値 v へのマッピングが含まれている場合、(key==null ? k==null : key.equals(k)),
そのマッピングは削除されます。(マップには、そのようなマッピングを最大 1 つ含めることができます。)
マップが以前にキーに関連付けた値、またはnull
マップにこのキーのマッピングが含まれていなかった場合は、値を返します。(null
戻り値null
は、実装が値をサポートしている場合、マップが以前に指定されたキーに関連付けられていたことを示すこともできnull
ます。) 呼び出しが戻ると、マップには指定されたキーのマッピングが含まれなくなります。
パラメーター:
key - マッピングをマップから削除するキー。
戻り値:
指定されたキーに関連付けられた以前の値、またはキーnull
のマッピングがなかった場合。
例:
Map<Integer, String> map=new HashMap<>();
map.put(20, "stackOverflow");
System.out.println(map.remove(20));
このコードは"stackOverflow"
、つまり、指定されたキーに関連付けられた以前の値を出力します。それが役に立てば幸い。
OPの質問に実際に答えた人は誰もいなかったようです。彼らは、イテレータを使用せずに、 「値またはキーを使用して」エントリを削除する方法を尋ねていました。もちろんremove(key)
、キーがあれば機能しますが、値を検索している場合は機能しません。
Alfredo の答えは、 の値側を検索するという点で最も近いものでしたMap
が、イテレータを使用しています。
Java 8 のStream
API を使用したソリューションを次に示します。イテレータなし:
Map<K, V> newMap = map.entrySet().stream()
.filter(entry -> !entry.getKey().equals(searchValue))
.filter(entry -> !entry.getValue().equals(searchValue))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
(キーK
とV
値の型を and に置き換えます。)
キーを引数として取るMap
のremove
methodを使用します。元のオブジェクトは必要ありません。マップ内の既存のキーと等しいオブジェクトが必要であり、マップ内の既存のキーequals
と同じものを生成しhashCode
ます。
public static void main(String[] args) {
//Constant.mapCustomer.remove("s");
Map<String, String> mapCustomer=new HashMap<String, String> ();;
mapCustomer.put("s","ss");
System.out.println(mapCustomer.get("s"));
mapCustomer.remove("s");
System.out.println(mapCustomer.get("s"));
}