Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找元素或检查它是否存在于数组/列表中?_Java_Arraylist - Fatal编程技术网

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