如何搜索列表并使用Java返回与其关联的特定字符串和数据

时间:2013-05-21 09:34:39

标签: java string list methods

我有一个名称列表,其中包含与其关联的帐号。如何创建一种方法,当我从键盘输入某个名称时,它会搜索列表并使用java返回与其关联的所有帐号?例如,如果我将名称“Lisheen”传递给该方法,它将返回与其关联的所有帐号以及以“Lisheen”开头的其他帐户名和数字。

      Name                     Account Number
     A-Wear                      78090231
     John                        76581234
     PSTN                        76811467
     Arni Harald                 78062351
     Barry Moore                 77002345
     Chill industries            79205416
     Espion                      78348903
     Michael                     78583451
     Kathleen O'Hara             78505421
     Liam Home                   76314321
     Lisheen Mine                78074315
     Lisheen Mine                78085413
     Lisheen Mine                78083413
     Lisheen Mine                78083413
     Lisheen Mine                78084315
     Lisheen Mine                78086441
     Lisheen Mine Res. RD        77972341
     Lisheen Mine Res. SW        77662345
     Lisheen Mine Res. TMcK      78521234
     Nolan Supermarket           79101234
     Nolan Transport             78095413
     PR Reilly Merchants Quay    77387689
     PR Reilly Togher            77382351
     PR Reilly Howth             77383215
     SightSavers                 78228794

3 个答案:

答案 0 :(得分:1)

您可以将Map<String, List<Integer>>用于此目的。

首先处理您的列表并将其添加到Map(假设Element为您的自定义类fullAccountNameaccountNumber

for(Element e : list) {
   List<Integer> accNums = map.get(e.getName());   
   if(accNums == null) {
         accNums = new ArrayList<Integer>();
         map.put(e.getName(), accNums);
   }
   accNums.add(e.getAccountNumber());
}

处理完毕后,

for(Entry<String, List<Integer>> e : map.entrySet()){
   if(e.getKey().startsWith(userSearch)) {
      return e; // which is essentially the key value pair of acc name vs. all acc. numbers
   }
}

答案 1 :(得分:0)

public HashMap<String, List<String>> getSortedHashMapForEmployees(string searchKeyword,List<yourDtoFromDB> orginalListFromDB)
    {
        HashMap<String, List<String>>hashmap=new HashMap<String, List<String>>();
        for (List<yourDtoFromDB> orginalList : orginalListFromDB) 
        {
            if(orginalList.getName().contains(searchKeyword))
            {
                List<String>accountNo=new ArrayList<String>();
                if(hashmap.containsKey(orginalList.getName()))
                {
                    accountNo=hashmap.get(orginalList.getName());
                }
                accountNo.add(orginalList.getAccountNo());
                hashmap.put(orginalList.getName(), accountNo);
            }
        }
        return hashmap;

    }

答案 2 :(得分:0)

您必须使用地图来执行此操作,因为您需要将姓名与帐号相关联。

您可以使用Map<String, List<Integer>>为每个名称存储相应的帐号列表。(尝试自己动手)

然后,为了找到搜索关键字,请使用方法并传递地图和搜索关键字。然后,您可以使用下面的伪代码来搜索您的密钥。

这是样本伪代码:

Map<String, List<Integer>> temp=new HashMap<String, List<Integer>>();
for(Entry<String, List<Integer>> e : map.entrySet()){
   if(e.getKey().contains(searchKey)) {
     temp.put(e.getKey(),e.getValue());
   }
}
return temp;

此处temp将是一个包含姓名以及与搜索关键字匹配的帐号的地图。