Java 查找元素或检查它是否存在于数组/列表中?
我是新手,我真的不明白这是怎么回事 我列出了一个存储房间信息的列表:Java 查找元素或检查它是否存在于数组/列表中?,java,arraylist,Java,Arraylist,我是新手,我真的不明白这是怎么回事 我列出了一个存储房间信息的列表: List<Room> rooms = new ArrayList<>(); (我用构造函数和getRoomNumber()等方法创建了一个“Room”类) 我发现我可以搜索“房间”列表并调出我知道存在的房间的信息,例如房间号为101的房间: // Info for room '101' Room room = rooms.stream() .filter(r -> r.
List<Room> rooms = new ArrayList<>();
(我用构造函数和getRoomNumber()等方法创建了一个“Room”类)
我发现我可以搜索“房间”列表并调出我知道存在的房间的信息,例如房间号为101的房间:
// Info for room '101'
Room room = rooms.stream()
.filter(r -> r.getRoomNumber() == 101)
.findFirst().orElseThrow();
System.out.println("Room Number: " + room.getRoomNumber());
System.out.println("Type: " + room.getRoomType());
System.out.println("Cost: " + room.getPrice());
System.out.println("Capacity: " + room.getCapacity());
System.out.println("Facilities: " + room.getFacilities());
上面的代码工作正常
我尝试使用上面的try和catch来查看房间是否存在(如果不存在,则抛出NoSuchElementFound异常),但这似乎根本不起作用,代码甚至无法编译
我还尝试使用(带valueOf和不带valueOf):
但这并没有真正起作用。代码可以编译,但实际上什么都没做
因此,我的问题(如前所述)是:
(1) 如何搜索此列表,例如检查是否存在编号为“401”的房间
(2) 我怎样才能打印出每个房间及其信息
谢谢 从这个方法开始怎么样? 为您的Room类定义一个
公共字符串toString(){…}
,打印出所有值,然后执行以下操作:
for( Room room: rooms ) {
System.out.println("Room: " + room);
if( room.getRoomNumber()==401 ) System.out.println("found !");
}
为什么不使用简单的
for循环
对其进行迭代,或者使用迭代器
public boolean roomExists(List<Room> rooms, int roomNumber) {
Iterator<Room> itr = rooms.iterator();
while (itr.hasNext()) {
Room room = itr.next();
if (ruoomNumber == room.getRoomNumber()) return true;
}
return false;
}
并创建一个函数来列出详细信息
public void printData (List<Room> rooms) {
Iterator<Room> itr = rooms.iterator();
while (itr.hasNext()) {
Room room = itr.next();
System.out.println(room);
}
}
public void打印数据(列出房间){
迭代器itr=rooms.Iterator();
while(itr.hasNext()){
房间=itr.next();
系统输出打印(房间);
}
}
假设您的Room类中有相关的getter方法:
for (Room room : rooms) {
if (room.getRoomNumber() == 401) System.out.println("Room 401 found");
}
用于打印arraylist中的所有房间(使用房间类toString()方法)
如果您想检查特定房间并抛出一个
异常
,如果它不存在,那么您需要向供应商提供异常
方法,例如:
List<Room> rooms = new ArrayList<>();
Room room = rooms.stream()
.filter(r -> r.getRoomNumber() == 101)
.findFirst()
.orElseThrow(() -> new NoSuchElementException());
List rooms=new ArrayList();
Room=rooms.stream()
.filter(r->r.getRoomNumber()==101)
.findFirst()
.orelsetrow(()->new NoSuchElementException());
尝试使用此
int findRoomNumber = 101;
Room result = rooms.stream()
.filter(r -> r.getRoomNumber() == findRoomNumber)
.findFirst()
.orElseThrow(() -> new NoSuchElementException("Room not found : " + findRoomNumber));
您的代码没有编译,因为您没有将Supplier
传递给orelsetrow
方法
(1) 如何搜索此列表,例如,检查是否显示房间号
“401”是否存在
(2) 我怎样才能打印出每一个房间和它的信息
有吗
如果您的Room类中尚不存在toString方法,请在其中添加该方法:
@Override
public String toString() {
return "Room{" + "roomNumber=" + roomNumber + ", roomType=" + roomType + ", price=" + price + ", capacity=" + capacity + ", facilities=" + facilities + '}';
}
要打印房间列表中的每个房间,请执行以下操作:
rooms.stream().forEach(System.out::println);
使用流,映射数字为401的元素,并选中:ifPresent。在toString方法中,至少在房间属性之间添加一些空格不会有任何影响。。。
List<Room> rooms = new ArrayList<>();
Room room = rooms.stream()
.filter(r -> r.getRoomNumber() == 101)
.findFirst()
.orElseThrow(() -> new NoSuchElementException());
int findRoomNumber = 101;
Room result = rooms.stream()
.filter(r -> r.getRoomNumber() == findRoomNumber)
.findFirst()
.orElseThrow(() -> new NoSuchElementException("Room not found : " + findRoomNumber));
boolean roomExists = rooms.stream().anyMatch(r->r.getRoomNumber() == 401);
@Override
public String toString() {
return "Room{" + "roomNumber=" + roomNumber + ", roomType=" + roomType + ", price=" + price + ", capacity=" + capacity + ", facilities=" + facilities + '}';
}
rooms.stream().forEach(System.out::println);