【问题标题】:How to search a list and return the specific strings and data associated with it using Java如何使用 Java 搜索列表并返回与其关联的特定字符串和数据
【发布时间】:2013-05-16 00:38:00
【问题描述】:

我有一个名称列表,其中包含与之关联的帐号。我将如何创建一个方法,当我从键盘键入某个名称时,它将搜索列表并使用 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

【问题讨论】:

  • 您的列表是什么样的(实施)?你试过什么?
  • 你的列表是什么样的?
  • 您必须做的一个简单列表是:读取数据,例如从文件中解析文本并转换为简单的对象,例如从控制台读取用户输入,使用指定的条件在列表中查找对象。你试过什么?你有什么具体问题吗?
  • 这些是收藏列表吗?
  • 你没有提供任何代码。

标签: java string list methods


【解决方案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
   }
}

【讨论】:

  • 您忘记将新的ArrayList 添加到地图中(并且拼写错误的accNums
  • 我建议使用 contains 而不是 startsWith 因为它会更好的搜索。
  • 有更简单的方法吗?
【解决方案2】:
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;

    }

【讨论】:

  • 但我也想返回与之关联的帐号
  • @Lance 检查我的答案,它会回复你的问题
  • 它只是一个名称和帐号的列表,是的,同一个用户可以有不同的帐号
【解决方案3】:

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

您可以使用Map&lt;String, List&lt;Integer&gt;&gt; 为每个名称存储相应的帐号列表。(自己尝试这样做)

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

这是示例伪代码:

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 将是一张地图,其中包含与搜索键匹配的姓名和帐号。

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 2021-01-19
    • 2014-02-12
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多