在IT邦幫忙看到的問題,如何用value在HashMap
取得key。
Java的Map
key不能重複,但value可以重複,所以同樣的value可能有多個key。
如果要用value找出Map
中的key,那勢必會找到0到多個,可用List
來裝。
作法就是遍歷Map
中的每個值來比對要找的value,如果相同則把該值的key蒐集到List
。
package com.abc.demo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "a");
map.put(3, "b");
map.put(4, "b");
map.put(5, "b");
List<Integer> aKeys = getKeys(map, "a"); // 取得value "a"的key
System.out.println(aKeys); // [1, 2]
List<Integer> bKeys = getKeys(map, "b"); // 取得value "b"的key
System.out.println(bKeys); // [3, 4, 5]
}
/** 用value取得Map中的key */
private static <K, V> List<K> getKeys(Map<K, V> map, V value) {
return map.entrySet().stream() // Stream<Set<Entry<K, V>>>
.filter(e -> e.getValue().equals(value)) // 比對是否符合要找的value
.map(Map.Entry::getKey) // 只拿key
.collect(Collectors.toList()); // 塞到List
}
}
如果要找的value是個物件,則必須複寫該物件的equals()
才能正確比較。
參考:
沒有留言:
張貼留言