首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更简单的方法在一个HashMap中的另一个HashMap中创建一个列表?

问有没有更简单的方法在一个HashMap中的另一个HashMap中创建一个列表?
EN

Stack Overflow用户
提问于 2018-12-31 22:31:43
回答 3查看 177关注 0票数 0

我正在开发一个程序,该程序授权服务器的用户使用生成的密钥访问它,目前我正在处理生成部分。服务器的所有者可以指定密钥的数量、服务器ID和密钥的持续时间。我需要存储并检查密钥是否与serverID匹配,以便用户可以使用密钥获取访问权限。

我唯一能想到的就是一个复杂的HashMap组合,里面有另一个HashMap,在那个HashMap里面有一个列表。第一个字符串是每个服务器唯一的服务器ID,该列表用于批量生成的密钥,最后一个字符串值用于这些密钥的持续时间。

代码语言:javascript
复制
static HashMap<List<String>, String> keyTimeBundle = new HashMap<>();
static List<String> generatedKeys = new ArrayList<>();
static HashMap<String, HashMap<List<String>, String>> clientGeneratedKeys = new HashMap<>();

问题是,在检查密钥是否与匹配的服务器ID匹配时,我不知道从哪里开始,因为密钥在列表中的另一个HashMap中。我确信有另一种更简单的方法来实现它,但我还没有想到它,所以请不要使用我的方法来解释如何存储和检查值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-31 22:47:56

非常简单的不同方法是只使用HashMap<String,String>。您可以将key作为<serverId><delimiter(such as '#')><generatedKey>,并将value作为该密钥在该特定服务器中的持续时间。

在搜索时,只需连接serverId和key,并检查持续时间。

票数 0
EN

Stack Overflow用户

发布于 2018-12-31 22:43:17

它肯定会变得很笨拙。现在是时候用一些经过仔细考虑的类来削减过度增长的部分了。给你的程序中的概念起个好名字会让你更容易理解你所需要的逻辑和数据结构。

代码语言:javascript
复制
class Id {
    String value;
}

class Server {
    Id id;
    List<Key> keys;
}

class Key {
    Id id;
    Server server;
    Instant expirationDate;
}

每个键都有一个对它所针对的服务器的引用,每个服务器都有一个提供对它的访问的键的列表。不是将过期时间分配给多个密钥,而是为每个密钥指定自己的过期时间。创建一批密钥只意味着创建一堆密钥,并为它们提供相同的过期时间。

Id类可能只是String的一个简单包装器,但它使代码更易于阅读,因为您不必弄清楚不同的String是什么(它们是ID吗?名字?)。名称Id清楚地表明它们是ID字符串。

一旦有了类,就可以更容易地考虑需要哪些额外的数据结构。例如,您需要某种全局映射来按ID查找服务器。

代码语言:javascript
复制
public static Map<Id, Server> serversById;
票数 3
EN

Stack Overflow用户

发布于 2018-12-31 22:43:48

我建议您实现键的POJO表示

代码语言:javascript
复制
public class Key{
    private String key;
    //duration is key specific this gives you more flexibility in issuing temporary individual keys
    private long duration;
    ....

然后将每个服务器密钥列表存储在映射中

代码语言:javascript
复制
HashMap<String, List<Key>> clientGeneratedKeys = ...

至于检查,您将检查该服务器的密钥列表是否包含提交的密钥(不要忘记通过比较' key‘属性来实现Key class equals )

代码语言:javascript
复制
clientGeneratedKeys.get("Server Id").contains("submitted key");

您需要在前一行代码中进行一些null-safety检查

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53988572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档