如何将条目放入地图?

新手上路,请多包涵

有什么方法可以将整个 Entry 对象放入 Map 对象,例如:

 map.put(entry);

而不是像这样传递键值对:

 map.put(key,value);

原文由 pgmank 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 295
2 个回答

我搜索了 Map 接口方法,但没有方法可以获取条目并将其放入地图中。因此,我使用一点点继承和 Java 8 接口自己实现了它。

 import java.util.AbstractMap;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Maps {

    // Test method
    public static void main(String[] args) {
        Map.Entry<String, String> entry1 = newEntry("Key1", "Value1");
        Map.Entry<String, String> entry2 = newEntry("Key2", "Value2");

        System.out.println("HashMap");
        MyMap<String, String> hashMap = new MyHashMap<>();
        hashMap.put(entry1);
        hashMap.put(entry2);

        for (String key : hashMap.keySet()) {
            System.out.println(key + " = " + hashMap.get(key));
        }

        System.out.println("\nTreeMap");
        MyMap<String, String> treeMap = new MyTreeMap<>();
        treeMap.put(entry1);
        treeMap.put(entry2);

        for (String key : treeMap.keySet()) {
            System.out.println(key + " = " + treeMap.get(key));
        }
    }

    /**
     * Creates a new Entry object given a key-value pair.
     * This is just a helper method for concisely creating a new Entry.
     * @param key   key of the entry
     * @param value value of the entry
     *
     * @return  the Entry object containing the given key-value pair
     */
    private static <K,V> Map.Entry<K,V> newEntry(K key, V value) {
        return new AbstractMap.SimpleEntry<>(key, value);
    }

    /**
     * An enhanced Map interface.
     */
    public static interface MyMap<K,V> extends Map<K,V> {

        /**
         * Puts a whole entry containing a key-value pair to the map.
         * @param entry
         */
        public default V put(Entry<K,V> entry) {
            return put(entry.getKey(), entry.getValue());
        }
    }

    /**
     * An enhanced HashMap class.
     */
    public static class MyHashMap<K,V> extends HashMap<K,V> implements MyMap<K,V> {}

    /**
     * An enhanced TreeMap class.
     */
    public static class MyTreeMap<K,V> extends TreeMap<K,V> implements MyMap<K,V> {}
}

MyMap 接口只是通过添加一种方法扩展 Map 接口的接口, public default V put(Entry<K,V> entry) 。除了仅定义方法外,还对默认实现进行了编码。这样做,我们现在可以将此方法添加到任何实现 Map 接口的类,只需定义一个实现 MyMap 接口的新类并扩展我们选择的地图实现类。所有这些都在一行中!这在上面代码的底部进行了演示,其中创建了两个类,每个类都扩展了 HashMap 和 TreeMap 实现。

原文由 pgmank 发布,翻译遵循 CC BY-SA 3.0 许可协议

要使用条目实例化地图(与您在 Google Guava 库中所做的 Arrays.asList(T... a)Sets.newHashSet(T... a) 相同的方式,我发现了这个:

 import java.util.AbstractMap;
import java.util.Map;

public class MapWithEntries {

    private static final Map.Entry<String, String> ENTRY_1 = new AbstractMap.SimpleEntry<>("A", "Hello");
    private static final Map.Entry<String, String> ENTRY_2 = new AbstractMap.SimpleEntry<>("B", "World");

    private static final Map<String, String> MAP_WITH_ENTRIES = Map.ofEntries(ENTRY_1, ENTRY_2);
}

原文由 Matt De Poorter 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题