在 Java 中,可以使用多种方法来从一个 Map 中提取特定键对应的条目,并将其放入新的 Map 中。以下是几种常见的实现方式:

使用 Java 8 及以上版本的流(Stream)

使用流可以简洁地处理这个问题,并且代码易于理解。

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapFilterExample {
    public static void main(String[] args) {
        Map<String, Integer> originalMap = new HashMap<>();
        originalMap.put("a", 1);
        originalMap.put("b", 2);
        originalMap.put("c", 3);
        originalMap.put("d", 4);

        Map<String, Integer> filteredMap = originalMap.entrySet()
                .stream()
                .filter(entry -> entry.getKey().equals("a") || entry.getKey().equals("b"))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        System.out.println(filteredMap); // 输出: {a=1, b=2}
    }
}

使用传统的循环

这种方法适用于 Java 7 及更早版本,或者不希望使用流时。

import java.util.HashMap;
import java.util.Map;

public class MapFilterExample {
    public static void main(String[] args) {
        Map<String, Integer> originalMap = new HashMap<>();
        originalMap.put("a", 1);
        originalMap.put("b", 2);
        originalMap.put("c", 3);
        originalMap.put("d", 4);

        Map<String, Integer> filteredMap = new HashMap<>();
        for (Map.Entry<String, Integer> entry : originalMap.entrySet()) {
            if ("a".equals(entry.getKey()) || "b".equals(entry.getKey())) {
                filteredMap.put(entry.getKey(), entry.getValue());
            }
        }

        System.out.println(filteredMap); // 输出: {a=1, b=2}
    }
}

使用 Java 8 的方法引用

这种方法与使用流类似,但使用了方法引用来代替 lambda 表达式,使得代码更加简洁。

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapFilterExample {
    public static void main(String[] args) {
        Map<String, Integer> originalMap = new HashMap<>();
        originalMap.put("a", 1);
        originalMap.put("b", 2);
        originalMap.put("c", 3);
        originalMap.put("d", 4);

        Map<String, Integer> filteredMap = originalMap.entrySet()
                .stream()
                .filter(e -> "a".equals(e.getKey()) || "b".equals(e.getKey()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        System.out.println(filteredMap); // 输出: {a=1, b=2}
    }
}

使用 Guava 库

如果应用程序已经引入了 Google Guava 库,那么可以利用 FluentIterable 或其他工具类来简化操作。

import com.google.common.collect.Maps;
import com.google.common.collect.Iterables;

import java.util.HashMap;
import java.util.Map;

public class MapFilterExample {
    public static void main(String[] args) {
        Map<String, Integer> originalMap = new HashMap<>();
        originalMap.put("a", 1);
        originalMap.put("b", 2);
        originalMap.put("c", 3);
        originalMap.put("d", 4);

        Map<String, Integer> filteredMap = Maps.filterKeys(originalMap, k -> "a".equals(k) || "b".equals(k));

        System.out.println(filteredMap); // 输出: {a=1, b=2}
    }
}

选择哪种方法取决于具体需求以及使用的 Java 版本。如果正在使用的是较新的 Java 版本,那么推荐使用流式 API,因为它提供了更现代且功能丰富的编程模型。