gpt4 book ai didi

java - 将一组常量字符串(键)与 Map 进行比较的最佳方法

转载 作者:行者123 更新时间:2023-11-30 10:06:15 27 4
gpt4 key购买 nike

所以,我有一个 map (字符串,字符串),我收到这张 map 可以有大约 600-800 个条目。我的任务是根据键(常量字符串)仅检索这些对中的大约 60-120(基于某些逻辑)。

现在我已经创建了一个所需 key 的列表,我正在迭代我收到的 map 并将所需的对拉出到另一个 map 中并传递它。这行得通,但代码看起来很糟糕。

肯定有更好的方法来做到这一点。有什么建议吗?

我想过使用包含而不是匹配键,但我的要求是精确匹配。是的,我读到了有关使用 RegEx 进行精确匹配的信息,因此可以将其用作最后的手段。

我需要帮助的是:1. 比将它们放在列表中更好的存储所需键的方法。这个键列表将是一个常量。将 60-120 个字符串的列表硬编码到 List 中看起来很糟糕。2. 比较上述列表并提取所需对的最快(时间)方法。

我的代码:

List <String> keysToCheck = new ArrayList<String>();
keysToCheck.add("attrib1");
...
keysToCheck.add("attribN");

Map<String, String> newMap = new HashMap<String, String>();
for (String key : keysToCheck) {
if(mapRcvd.containsKey(key)) {
newMap.put(key, mapRcvd.get(key));
}
}

我正在寻找更快的解决方案,因为这只是大型应用程序的一小部分。我很乐意编写大量代码来实现这一点。

最佳答案

您可以将所有常量键存储在一个文件中,其中每一行包含一个键。然后您可以获得所有必需的 key ,例如:

List<String> requiredKeys = Files.lines(Paths.get(PATH_TO_FILE_WITH_KEYS))
.collect(Collectors.toList());

现在使用流 filter 方法获取具有所需键的 map :

 Map<String, String> collect = mapRcvd.entrySet().stream()  // get stream of map entries
.filter(entry -> requiredKeys.contains(entry.getKey())) // filter only such entries which has required key
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); // collect all filtered entries into new map

更多关于 Collectors.toMap , javadoc

更新:虽然获取具有所需键的 map 可能看起来更紧凑,但在您的示例中使用containsKey 方法的for 循环比包含。您可能应该使用评论中@Holger 留下的建议

关于java - 将一组常量字符串(键)与 Map 进行比较的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54745923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com