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]