gpt4 book ai didi

java - 在 Java 中实现一种键值对(本质上不是 HashMap)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:39:14 24 4
gpt4 key购买 nike

在 Java 中实现以下场景的最佳方法是什么:

一种键值对机制,但它看起来像这样:

param1 + param2 + param3 -> output1   
param1 + * + !param3 -> output2
param1 + text containing value param2 + * -> output3

'*' => any parameter
!param => any value other than this parameter
text containing value 'param' => any data which contains the value 'param'. ex: aaaaa,bbb,param,ccc or aaaparambbb

在我看来,HashMap 很难实现这种类型的映射。实现这样的映射的最佳方法是什么?
我也在考虑将它们放在 Oracle 表中并尝试编写一个过程,但在 Java 中可能有更好的方法。

最佳答案

实现此目的的一种方法是三重嵌套 HashMap 。或 HashMap 的 HashMap 的 HashMap 。

查询的伪代码应该是这样的:

//You would call this method to search. 
string query(string param1, string param2, string param3)
{
// The essence of the logic is, if you give a value for param3,
// then it will do the subquery of the hashMap that param3
// is the key of, if you don't supply a value (or provide the wildcard)
// it will search all the different hashmaps of the parent hashmap.
// See below for an example
if param1 != WILDCARD
then subquery1(hashmap[param1], string param2, string param3);
else for each x in hashmap, subquery1(x,string param2, string param3)
}

string subquery1(hashmap[hashmap[]] maps, string param2, string param3)
{
// The essence of the logic is, if you give a value for param2,
// then it will do the subquery of the hashMap that param2
// is the key of, if you don't supply a value (or provide the wildcard)
// it will search all the different hashmaps of the parent hashmap.
if param2 != WILDCARD
then subquery2(maps[param2], string param3);
else for each x in maps, subquery2(x, string param3)
}

string subquery2(hashmap[] maps, string param3)
{
if param3 != WILDCARD
then return maps[param3]
else for each x in maps, return maps[param3]
}

显然,您需要定义是否允许返回多个值以及您希望如何解决这个问题。您还需要确定参数 3 是否可为空?问题陈述非常含糊,但我已尽力回答我认为您的问题所在。

例如,如果您已将以下值添加到 HashMap 中。
键 1、键 2、键 3 = 值 1
键 1、键 2、键 4 = 值 2
如果您搜索 key1、*、key3,您将返回 value1。
如果您搜索 key1、*、*,您将得到 value1,并返回 value2。

更新:
当你调用 query("key1", "", "key3");
由于 param1 是有效的(不是通配符)我们调用 subquery1(hashmap["key1"], "
", "key3");
在我们到达 subquery1 之前, hashMap["key1"] 被评估,但它返回另一个 hashmap,
让我们称这个 hashmap hashmap2[]。所以 subquery1 实际上是用 (hashmap2[], "*", "key3");

现在我们在子查询1中。
由于 param2 是“*”,我们然后遍历 hashmap2[] 的所有值,
对于 hashmap2[] 中的每个 hashmap3[],我们调用 subquery3(hashmap3[], "key3");

此时param3有效,调用hashmap3["key3"]返回value1;

关于java - 在 Java 中实现一种键值对(本质上不是 HashMap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4743731/

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