当前位置: 首页 > 知识库问答 >
问题:

在ArrayList Java中搜索特定对象

刘选
2023-03-14

我试图根据用户输入找到一个特定的对象。用户需要输入姓名和性别,然后程序应该搜索ArrayList,查看是否有匹配的姓名和性别。ArrayList中的对象有3个实例变量,但程序只搜索2个。如何在ArrayList中只搜索选定的几个特征?

在我的项目中,我有:

int nameListLength = nameList.size();
   .
   .
   .

boolean done = false;
while (!done) {
   System.out.println ("Please enter a name:");
   String searchName = input.nextLine();
   if (searchName.equals("DONE")) {
      done = true;
   } else {
      System.out.println ("Please enter a gender:");
      String searchGender = input.nextLine();
      // Search the ArrayList.
      for (int i = 0; i < nameListLength; i++) {
         // See if the gender is in the ArrayList
         if (searchGender.equals(nameList.get(i).getGender())) {
            // See if the name matches the gender in the ArrayList
            if (searchName.equals(nameList.get(i).getName())) {
               System.out.println ("Match found");
            }
         }
      }
   }
}

其中,nameList是ArrayList的名称,getName()是返回存储在对象中的名称的方法的名称,getGender()是返回存储在对象中的性别的方法的名称。我输入调试语句来确定ArrayList是否正确存储了信息,我只是在弄清楚如何搜索我要搜索的内容时遇到了问题。我知道有一个contains(Object o)方法,但我不确定我是否能在这里实现它,因为我只需要匹配对象的2个特征,即使对象包含3个数据段。

共有3个答案

长孙星汉
2023-03-14

就我对你的问题的理解而言,你想根据输入获取匹配的对象。

您已经发布了一个可行的解决方案。您只需要获得名为List.get(i)的对象,其中ystem.out.println(“找到匹配”)。

您还可以使用for()-循环循环遍历列表中的每个项,因此您不需要使用长度来走很长的路。

boolean done = false;
YourObject result;
while (!done) {
   System.out.println ("Please enter a name:");
   String searchName = input.nextLine();
   if (searchName.equals("DONE")) {
      done = true;
   } else {
      System.out.println ("Please enter a gender:");
      String searchGender = input.nextLine();
      // Search the ArrayList.
      for (YourObject item: nameList) {
         // See if the gender is in the ArrayList
         if (searchGender.equals(item.getGender())) {
            // See if the name matches the gender in the ArrayList
            if (searchName.equals(item.getName())) {
               result = item;
            }
         }
      }
   }
}

结果就是你的匹配对象

松和泰
2023-03-14

使用列表。contains方法,则需要在包含数据的对象上实现equals()方法,以便它可以确定该对象是否真的等于另一个对象。

在您的实例中,您只需实现三分之二的数据需要相等,这样equals()方法就可以返回true。

韩夕
2023-03-14

一般来说,你的代码看起来不错,即使有点凌乱。你声称它不起作用,但我看不到明显的错误,所以我会仔细检查输入列表和搜索词(比如案例特异性)。

不要为了能够使用contains而重写equal,因为这意味着您总是要通过这两个属性来比较对象。

您可以考虑使用新的Stream API,其中有几个方法可以完全满足您的需求:

List<Yourtype> found = list.stream().filter(u -> u.getName().equals(searchName) && u.getGender().equals(searchGender)).collect(Collectors.toList());

检查是否有匹配元素

boolean isMath = list.stream().anyMatch(u -> u.getName().equals(searchName) && u.getGender().equals(searchGender));

以第一匹配为例:

Yourtype match = list.stream().findFirst(u -> u.getName().equals(searchName) && u.getGender().equals(searchGender)).get();
 类似资料:
  • 问题内容: 我有一堂课。它具有以下特征; 它具有2个属性,和。1个人可以拥有许多电话,因此您可能会在下面看到具有多个ID的人。 还有另一门课叫。它将有一个称为的方法。 personList,具有3-4个Person对象。我需要搜索PersonArrayList并找到与Person对象匹配的对象。我怎样才能做到这一点? 注意:我尝试过。但这是行不通的。 问题答案: 我尝试了personList.co

  • 我有一个对象的arraylistTile有我想创建一个搜索函数,在这里我迭代遍历瓷砖的每个属性和arraylist中每个颜色内的每个属性(就像每个循环的嵌套),有没有一种简单的方法可以做到这一点?

  • 我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索字符串。 因此,我希望有一个函数在我的ArrayList中搜索所有的“name”字符串,例如5个对象。

  • 本文向大家介绍在C#中搜索Collection中指定对象的索引,包括了在C#中搜索Collection中指定对象的索引的使用技巧和注意事项,需要的朋友参考一下 要在Collection中搜索指定对象的索引,代码如下- 示例 输出结果 这将产生以下输出- 示例 现在让我们来看另一个示例- 输出结果 这将产生以下输出-

  • 问题内容: 我可以使用一个ResultSet方法搜索一个ResultSet并检查它是否具有特定的值/元素吗? 与方法类似。 如果没有,则无需键入搜索方法,我将做一个:) 提前致谢。 问题答案: 不要在Java端进行搜索。这不必要地很慢,并且占用内存。您基本上是在接手数据库的设计工作。只需让DB完成它设计的工作即可:借助SQL语言的强大功能,选择并返回所需的数据。 开始学习SQL子句。例如,要检查用

  • 我刚开始使用hibernate lucene搜索。从几天以来,我一直致力于搜索关键字与特殊字符。我正在使用MultiFieldQueryParser进行精确短语匹配以及布尔搜索。但在这个过程中,我无法得到搜索关键字的结果,如“有1年以上的经验”,如果我没有在搜索关键字周围添加任何引号,那么我就得到了结果。所以我在执行lucene查询时观察到的是,它正在转义特殊符号(+)。我正在使用Standard