在我的一个程序中,我有以下方法,允许用户在ArrayList中输入与笔记本电脑关联的唯一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.");
}
}
}
假设您有一个名为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
})
可以使用打印匹配项后使用的返回语句来执行此操作
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
使用以下代码:
//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 } 如何用我的程序修正?