【问题标题】:Check if JTextfield value exist in ArrayList检查 ArrayList 中是否存在 JTextfield 值
【发布时间】:2018-11-16 20:46:33
【问题描述】:

我正在尝试检查输入的房间号是否存在于数组列表中:

private void initAction(RoomsWindow rw, RoomAddUpdateWindow raw) {
            btnConfirm.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    ArrayList<Room> rooms = RoomsWindow.loadRoom();
                    for (Room r : rooms) {
                        r.getNumber();
                    }
                    if (rooms.equals(txtNumber.getText())) {
                        JOptionPane.showMessageDialog(null, "Room number already exists!", "Add",
                                JOptionPane.PLAIN_MESSAGE);
                    } else {
                        File fileRooms = new File("src/txt/rooms");
                        try {
                            FileWriter fw = new FileWriter(fileRooms, true);
                            BufferedWriter bw = new BufferedWriter(fw);
                            PrintWriter pw = new PrintWriter(bw, true);
                            String tv = (String) cbTV.getSelectedItem();
                            if (cbTV.getSelectedItem().equals("Yes")) {
                                tv = "true";
                            } else {
                                tv = "false";
                            }
                            String miniBar = (String) cbMiniBar.getSelectedItem();
                            if (cbMiniBar.getSelectedItem().equals("Yes")) {
                                miniBar = "true";
                            } else {
                                miniBar = "false";
                            }
                            pw.println(txtNumber.getText() + "|" + txtType.getText() + "|" + txtName.getText() + "|"
                                    + txtBeds.getText() + "|" + tv + "|" + miniBar + "|" + "false" + "|" + "false");
                            pw.close();
                            JOptionPane.showMessageDialog(null, "Succesfully", "Done", JOptionPane.PLAIN_MESSAGE);
                            raw.setVisible(false);
                            rw.setVisible(false);
                            RoomsWindow newRoomWindow = new RoomsWindow();
                            newRoomWindow.setVisible(true);

                        } catch (IOException exc) {
                            exc.printStackTrace();
                        }
                    }
                }
            });
        }

如果它存在,那么我不想写在文件中,只是为了在中打印一条消息

dialog: OptionPane.showMessageDialog(null, "Room number already exists!", "Add",
                                    JOptionPane.PLAIN_MESSAGE);

编辑 这是我的Room 课程: 封装实体;

public class Room {

    int number;
    String type;
    String name;
    int beds;
    Boolean tv;
    Boolean miniBar;
    Boolean ocupied;
    Boolean deleted;
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getBeds() {
        return beds;
    }
    public void setBeds(int beds) {
        this.beds = beds;
    }
    public Boolean getTv() {
        return tv;
    }
    public void setTv(Boolean tv) {
        this.tv = tv;
    }
    public Boolean getMiniBar() {
        return miniBar;
    }
    public void setMiniBar(Boolean miniBar) {
        this.miniBar = miniBar;
    }
    public Boolean getOcupied() {
        return ocupied;
    }
    public void setOcupied(Boolean ocupied) {
        this.ocupied = ocupied;
    }
    public Boolean getDeleted() {
        return deleted;
    }
    public void setDeleted(Boolean deleted) {
        this.deleted = deleted;
    }
    public Room(int number, String type, String name, int beds, Boolean tv, Boolean miniBar, Boolean ocupied,
            Boolean deleted) {
        super();
        this.number = number;
        this.type = type;
        this.name = name;
        this.beds = beds;
        this.tv = tv;
        this.miniBar = miniBar;
        this.ocupied = ocupied;
        this.deleted = deleted;
    }

}

否则,我当然想成功写入文件。我哪里错了?

【问题讨论】:

标签: java swing arraylist jtextfield


【解决方案1】:

“最简单”的路线要求您遍历rooms List 中的每个Room,并将roomNumberRoom 的房间号进行比较

类似...

List<Room> rooms = RoomsWindow.loadRoom();
// This may throw an exception, so you'll want to deal with that
String roomNumber = Integer.parseInt(txtNumber.getText());
boolean found = false;
for (Room room : rooms) {
    if (room.getNumber() == roomNumber) {
        found = true;
        break;
    }
}

nb:我没有你的 Room 类,所以我不得不“猜测”它的功能

一种“更时尚”的方式可能是利用流的 API

Room match = rooms.stream().filter(room -> room.getNumber() == roomNumber).orElse(null);
if (match != null) {
    // Found room
} else {
    // Did not find foom
}

【讨论】:

  • @NeoCortex 更新
  • 现在它找到了数字是否存在,但是当数字不存在时,我得到这个错误:Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException: No value present 在线:Room match = rooms.stream().filter(room -&gt; room.getNumber() == roomNumber).findFirst().get(); 更酷的方式非常酷,但我从不这样做,所以不知道要改什么。我想这个错误很详细。 :D 顺便说一句,我不知道为什么我不能提及您的用户名。 :D
  • 第一次在 Java 中处理可选项,曾想过它可能会返回一个 null,但不,这很容易。我已经测试并更新了它
  • 我做到了。 :D Jus 而不是.get().orElse(null) 更新,所以我可以接受答案。 :P
  • @NeoCortex 不错,不错的发现
【解决方案2】:

希望这会有所帮助

通过这种方式,您可以检查列表中的现有值。

if(rooms.contains(txtNumber.getText())){
    ///Do Not add
    }else{
    //add in List
    }

一切顺利。

【讨论】:

  • 我已经尝试过这种方式,但它无法正常工作。实际上,它的工作原理与我的示例相同。不管怎么说,还是要谢谢你。 :D
  • String != Room
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2016-01-24
相关资源
最近更新 更多