網頁

2019/12/14

Java 在HashMap中用value取key

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()才能正確比較。


參考:

沒有留言:

張貼留言