Java 方法在 ArrayList 中查找匹配项



我在我的一个程序中有以下方法,允许用户在 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.");
}
}
}

使用以下代码:

//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.");
}

您可以使用打印匹配项后使用的 return 语句执行此操作

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<Laptop>那么你就不需要所有这些疯狂的演员阵容。

编辑2

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

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

假设你有一个名为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是一个Optional<Laptop>,这意味着它可能包含也可能不包含Laptop值。您可以按如下方式使用此结果:

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
})

相关内容

  • 没有找到相关文章

最新更新