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

在ArrayList中查找匹配项的Java方法

邹弘
2023-03-14

在我的一个程序中,我有以下方法,允许用户在ArrayList中输入与笔记本电脑关联的唯一ID。

所需输出如下:

  • 如果用户输入的ID与ArrayList中的ID匹配,笔记本电脑及其规格将打印出来
  • 如果ID不匹配,它将打印出“无效ID”

我非常接近实现这一目标;然而,我只能弄清楚如何让它打印出是否匹配列表中的每台笔记本电脑。例如,如果用户输入的ID与列表中三台笔记本电脑中的一台匹配,它将按如下方式打印:

宏碁捕食者太阳神300 CPU:英特尔i7-9750h GPU:英伟达GTX1660ti内存: 16GB ID: 1234567

无效ID。

无效ID。

所以我的问题是:我如何让它只打印单个匹配或“无效ID”,同时仍然能够循环浏览整个列表以检查匹配?不一定要你给我提供修复,但至少帮助我指明正确的方向或帮助逻辑。我提前感谢你的任何帮助!

我的方法如下:

private static void findLaptop(ArrayList arr) {

    //Prompt user to input an ID.
    System.out.println("Input ID: ");
    System.out.println();

    //Scan for user input.
    Scanner keyboard = new Scanner(System.in);
    int inputId = keyboard.nextInt();

    //Loop through ArrayList and check for a match.
    for(int i=0; i<arr.size(); i++) {

        //If entered ID matches, print laptop information.
        if(inputId == ((Laptops) arr.get(i)).getId()) {
            System.out.println(((Laptops)arr.get(i)).getModel() + " CPU: " + ((Laptops)arr.get(i)).getCpu() + " GPU: " +
                    ((Laptops)arr.get(i)).getGpu() + " Memory: " + ((Laptops)arr.get(i)).getMemory() + "GB ID: " + 
                    ((Laptops)arr.get(i)).getId());
        }
        //If entered ID does not match, print invalid ID.
        else if(inputId != ((Laptops) arr.get(i)).getId()) {
            System.out.println("Invalid ID.");
        }
    }
}

共有3个答案

百里俭
2023-03-14

假设您有一个名为Laptop的类,如下所示:

public class Laptop {

    private String id;
    private String manufacturer;
    // other fields

    // getters and setters
}

您可以使用Java 8 Streams查找id为的匹配项:

List<Laptop> laptops = ...
String idToSearch = "something";

Optional<Laptop> result = laptops.stream()  // convert into stream for easier handling
    .filter(l -> l.getId().equals(idToSearch))  // find only laptops with a matching id
    .findFirst();  // find the first one, if present

变量result是一个可选变量

Laptop laptop = result.get();  // throws an exception if no value present, not reccomended

Laptop laptop = result.orElse(null);  // returns null if no value present

result.ifPresent(laptop -> {
    doSomething(laptop);  // this function is only called if a value is present
})

陆翰藻
2023-03-14

可以使用打印匹配项后使用的返回语句来执行此操作

for(int i=0; i<arr.size(); i++) {

    //If entered ID matches, print laptop information.
    if(inputId == (arr.get(i)).getId()) {
        System.out.println((arr.get(i)).getModel() + " CPU: " + (arr.get(i)).getCpu() + " GPU: " +
                (arr.get(i)).getGpu() + " Memory: " + (arr.get(i)).getMemory() + "GB ID: " + 
                (arr.get(i)).getId());

        return;
     }
}

 // outside loop
 System.out.println("Invalid ID.");

编辑

如果你有ArrayList正确设置为ArrayList

编辑2

如果你使用foreach循环,它会更干净

for (Laptop lt : arr) {
    if (iputId == lt.getId()) // etc

贝研
2023-03-14

使用以下代码:

    //Create a boolean
    boolean found= false; 
    for(int i=0; i<arr.size(); i++) {
        //If entered ID matches, print laptop information.
        if(inputId == ((Laptops) arr.get(i)).getId()) {
            System.out.println(((Laptops)arr.get(i)).getModel() + " CPU: " + ((Laptops)arr.get(i)).getCpu() + " GPU: " +
                    ((Laptops)arr.get(i)).getGpu() + " Memory: " + ((Laptops)arr.get(i)).getMemory() + "GB ID: " + 
                    ((Laptops)arr.get(i)).getId());
                    //set boolean true and break
                    found = true;
                    break;
        }
    }
  //Out side the look check If entered ID does not match, print invalid ID.
    if(!found) {
       System.out.println("Invalid ID.");
    }
 类似资料:
  • 问题内容: 我在Java中有一个ArrayList,我需要在其中查找所有出现的特定对象。方法ArrayList.indexOf(Object)仅发现一个事件,因此似乎我需要其他东西。 问题答案: 我认为您不必对此太幻想。以下应该可以正常工作:

  • 我正在尝试开发一个函数,该函数读取string的ArrayList,并且能够查找是否存在至少两个元组,它们从一组索引中具有相同的值,但对于一个补充索引不同。我通过使用正则表达式比较开发了这个函数的一个版本,如下所示: 但是,它是非常昂贵的,特别是如果有很多排。我曾想过创建一个更复杂的RegEx来考虑多个选择(使用“条件”),如下所示: 但问题是这样我无法比较补充索引值。对于如何定义一个可以直接满足

  • 我想知道如何实现以下操作:我有两个arraylists,其中的值相互关联。也就是说,同一索引上的arraylists的元素彼此相关。例如:ArrayList1(String ArrayList)=[id1,id2,id3,id2,id2,id1]。ArrayList2(整数ArrayList)=[2,3,2,5,6,3]。 我想创建2个新的arraylists与重复的值不再存在。在上面的例子中,新

  • 因此,我想在一个泛型类列表中交叉匹配数据,其中需要检查名称与姓氏的匹配,如果存在匹配,则返回数据或返回布尔值。这是我想到的 这返回TRUE,因为我使用GETTER AND SETTER通过设置布尔值从lambda表达式返回布尔值。 所以我在寻找最简单的lambda表达式来实现这一点?请问外面有人吗。

  • 问题内容: 我有两个表,并且具有一对多关系。一个可能与许多相关联。 我想做的是运行一个查询,该查询查找具有特定的attributeID集合的所有dataID。我不能: 那将使用那些属性中的任何一个来获取所有的dataID,我想要具有所有这些属性的dataID。 有什么建议吗? 仍然使用比基本选择更多的查询来解决问题。 问题答案: 由于您需要读取表的三个不同行,因此建议使用来避免子查询。

  • 在我的程序中,我有类似测试#6的错误:leastcommon({})exp。异常:第16行堆栈跟踪上的IllegalArgumentExceptionyour exceptionNoSuchElementException:NoSuchElementException LestCommon,第16行结果:fail } 如何用我的程序修正?