Java 基于多组值返回键
我基本上是尝试将数据存储成这种格式并检索它 我想要如下所示的东西Java 基于多组值返回键,java,Java,我基本上是尝试将数据存储成这种格式并检索它 我想要如下所示的东西 Key Value B1 --> payerName ----> "wpn", "wpfnb", "dgeft", "xbthy" B2 --> payerName ----> "SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy" 因此,对于B1,有payerName,对于B2,
Key Value
B1 --> payerName ----> "wpn", "wpfnb", "dgeft", "xbthy"
B2 --> payerName ----> "SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy"
因此,对于B1,有payerName,对于B2,类似地,到目前为止,我已经创建了一个数据结构,用于将payerName与“wpn”、“wpfnb”、“dgeft”、“xbthy”以及另一个付款人名称与“SSSwpn”、“wpfSSSnb”、“GGGdgeft”进行映射
到目前为止,我创建的以下自定义数据结构反映了payerName与“wpn”、“wpfnb”、“dgeft”、“xbthy”之间的映射,以及另一个payerName与“SSSwpn”、“wpfssnb”、“GGGdgeft”、“xbtyyyyy”之间的映射,但现在我还想相应地将它们与B1和B2链接起来
各位朋友,请告知我们如何修改并使用键附加它们,以便最终B1将与付款人名称进一步关联,并与值“wpn”、“wpfnb”、“dgeft”、“xbthy”以及类似的其他情况关联,其中B2与付款人名称关联,且最终与值“SSSwpn”、“wpfSSSnb”、“GGGdgeft”、“XBTYYYY”关联
下面是我创建的自定义数据结构,但在下面的数据结构中B1和B2不关联,因此请告知我如何修改下面的自定义数据结构,以便最终关联B1和B2
class DictionaryNode
{
DictionaryNode next[];
String data;
DictionaryNode()
{
next=new DictionaryNode[128];
for(int i=0;i<next.length;i++)
{
next[i]=null;
}
data=null;
}
}
class Dictionary
{
DictionaryNode root;
Dictionary()
{
root = new DictionaryNode();
}
public boolean add(String key,String data)
{
char[]ch=key.toCharArray();
DictionaryNode current=root;
for(int i=0;i<ch.length;i++)
{
if(current.next[ch[0]]==null)
{
current.next[ch[0]]=new DictionaryNode();
}
current=current.next[ch[0]];
}
if(current.data==null)
{
current.data=data;
return true;
}
else
{
return false;
}
}
public String search(String key)
{
char[]ch=key.toCharArray();
DictionaryNode current=root;
for(int i=0;i<ch.length;i++)
{
if(current.next[ch[0]]==null)
{
return null;
}
else
{
current=current.next[ch[0]];
}
}
return current.data;
}
}
public class main
{
public static void main(String []args)
{
Dictionary d=new Dictionary();
d.add("wpn", "AAA");
d.add("wpfnb", "AAA");
d.add("dgeft", "AAA");
d.add("dgeft", "BBB");
d.add("SSSwpn", "AAA");
d.add("wpfSSSnb", "BBB");
d.add("GGGdgeft", "BBB");
d.add("xbtYYYYhy", "BBB");
System.out.println(d.search("wpn"));
System.out.println(d.search("SSSwpn"));
}
}
类字典节点
{
dictionarynodenext[];
字符串数据;
DictionaryNode()
{
next=新字典代码[128];
对于(inti=0;i您可能需要查看java.util.Map
接口。该接口的常见实现是HashMap
下面是使用这些工具实现所需功能的一种方法。我正在将值添加到java.util.List
,但还有许多其他方法可以做到这一点
我正在使用@Test
注释,因为我正在使用Junit快速运行它,但是您可以像在示例中一样通过main()
方法调用它
由于任何值都可能与多个键相关联,因此您可能希望返回所有具有该值的键。下面的第二种方法就是这样做的
@Test
public void hashMapExample() {
Map payerNames = new HashMap<>(8); //if you're using Java 7 or higher
String[] b1Values = {"wpn", "wpfnb","dgeft","xbthy"};
payerNames.put("B1", Arrays.asList(b1Values));
String[] b2Values = {"SSSwpn", "wpfSSSnb", "GGGdgeft", "xbtYYYYhy"};
payerNames.put("B2", Arrays.asList(b2Values));
System.out.println("everything in the map="+payerNames);
List b1List = (List)payerNames.get("B1");
System.out.println("just b1 values=" + b1List);
System.out.println("all keys with wpn in them=" + getKeysByValue(payerNames, "wpn"));
}
private static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
Set<T> keys = new HashSet<>();
for (Map.Entry<T, E> entry : map.entrySet()) {
List<String> keysList = (List)entry.getValue();
for (String valueWithKey : keysList) {
if (Objects.equals(value, valueWithKey)) {
keys.add(entry.getKey());
}
}
}
return keys;
}
第二种方法是根据Vitali Fedorenko提供的方法改编的。被你的问题弄糊涂了-你所说的“关联B1和B2”是什么意思?你写的是当你从键B1中搜索一个值时,如果它包含相同的值,你还想检索键B2吗?我只想说,当我检索B1时,我应该得到一组与之相关的值,即wpn、wpfnb、dgeft、XBthy。同样,当我检索B2时,我应该得到一组值SSSwpn、wpfSSSnb、GGGdgeft。”Xbtyyyyyyy“
everything in the map={B2=[SSSwpn, wpfSSSnb, GGGdgeft, xbtYYYYhy], B1=[wpn, wpfnb, dgeft, xbthy]}
just b1 values=[wpn, wpfnb, dgeft, xbthy]
all keys with wpn in them=[B1]