Java 仅当ArrayList等于bookID时才更新它?

Java 仅当ArrayList等于bookID时才更新它?,java,arraylist,Java,Arraylist,我已经为我的图书馆应用程序设置了一个类型为book的ArrayList。我正在尝试实现的当前功能是编辑一本书的细节。我有一个名为bookID的变量,因此当我通过ArrayList调用此方法时,它将是newBook.get(index.getBookID()。有了这些信息,我想检查一下,然后做以下事情: 存在具有此ID的数组元素 使用新标题更新现有标题 我面临的问题: 循环获取ID所在的索引 更新现有标题,并将其替换为新标题 到目前为止,我的想法是: // Editing book

我已经为我的图书馆应用程序设置了一个类型为book的ArrayList。我正在尝试实现的当前功能是编辑一本书的细节。我有一个名为
bookID
的变量,因此当我通过ArrayList调用此方法时,它将是
newBook.get(index.getBookID()。有了这些信息,我想检查一下,然后做以下事情:

  • 存在具有此ID的数组元素
  • 使用新标题更新现有标题
我面临的问题:

  • 循环获取ID所在的索引
  • 更新现有标题,并将其替换为新标题
到目前为止,我的想法是:

    // Editing book in ArrayList
public void editBook(){
    System.out.println("==============================");
    // Ensuring array has at least one book
    if(newBook.size() > 0){
        // Get which part, and book the user would like to edits
        System.out.print("Enter Book ID to begin editing: ");
        int bookID = sc.nextInt();
        System.out.println("Press 1 or 2 to edit.");
        System.out.println("1: Edit title");
        System.out.println("2: Edit author");
        System.out.print("Enter option: ");
        int editOption = sc.nextInt();

        // Switch statement which will handle editing book
        switch(editOption){
        case 1: 
            // New title
            System.out.print("Enter new title: ");
            String newTitle = sc.nextLine();
            sc.next();

            // Updates title
            newBook.get(position).setTitle(newTitle);

            // Prints out title
            System.out.println(newBook.get(position).getTitle());

            break; // Edit title
上面的代码只是部分代码,下面的代码与问题无关。

直接方法。。。 所有这一切都会在
图书
列表
中循环,并将用户输入的
图书ID
与图书的
图书ID
进行比较。如果找到匹配项,则变量
bookToEdit
中会保留
Book
引用

如果循环完成后,
bookToEdit
null
,则
列表中没有与指定ID匹配的
Book
,否则,您现在有一个需要编辑的图书的引用

// Get which part, and book the user would like to edits
System.out.print("Enter Book ID to begin editing: ");
int bookID = sc.nextInt();
sc.nextLine();
Book bookToEdit = null;
for (Book book : newBook) {
    if (book.getId() == bookID) {
        bookToEdit = book;
        break;
    }
}
if (bookToEdit != null) {

    System.out.println("Press 1 or 2 to edit.");
    System.out.println("1: Edit title");
    System.out.println("2: Edit author");
    System.out.print("Enter option: ");
    int editOption = sc.nextInt();
    sc.nextLine();

    if (editOption == 1 || editOption == 2) {
        System.out.print("New " + (editOption == 1 ? "title: " : "author: "));
        String value = sc.nextLine();
        switch (editOption) {
            case 1:
                // Update title
                break;
            case 2:
                // Update author
                break;
        }
    } else {
        System.out.println("Invalid edit option");
    }

} else {
    System.out.println("Book with the id of " + bookID + " does not exist");
}
s 如果你想做一些更别致的事情,你可以使用

// Get which part, and book the user would like to edits
System.out.print("Enter Book ID to begin editing: ");
int bookID = sc.nextInt();
sc.nextLine();

List<Book> filtered = newBook.stream().filter((Book t) -> t.getId() == bookID).collect(Collectors.toList());
if (!filtered.isEmpty()) {
    Book bookToEdit = filtered.get(0);
从概念上讲,所有这些都是在键和对象之间生成映射或关系,这使得基于提供的键查找对象更快、更简单


查看更多详细信息

请使用地图解决您的问题。 您可以访问:

以下是为您提供的一些示例代码:

    //init the map
    Map<String, Book> dataMap = Maps.newHashMap();


    //insert record
    dataMap.put(bookId, book);


    //update record
    Optional<Book> bookOpt = Optional.ofNullable(dataMap.get(bookId));
    bookOpt.ifPresent(book->{
        book.setTitle(newTitle);
    });
//初始化映射
Map dataMap=Maps.newHashMap();
//插入记录
dataMap.put(bookId,book);
//更新记录
Optional bookOpt=Optional.ofNullable(dataMap.get(bookId));
bookOpt.ifPresent(图书->{
书名(新标题);
});

使用
映射
,键入
图书ID
,或者您可以使用Java 8新的
API和
过滤器
列表
,但是使用
映射
更有效
int-editOption=sc.nextInt()。。。字符串newTitle=sc.nextLine()->(我没有阅读您的问题,但此问题需要更正)。对不起,我不确定
地图的功能。我还是一年级学生。你知道什么是树型数据结构吗?它有点类似,它允许基于唯一键更快地查找项目。您可能更熟悉的一种方法是使用int参数(intbookid)创建一个方法。如果
newBook.getId()==bookId
,则可以使用for/for-each循环返回对象/索引,否则在循环完成时返回null或-1<代码>地图
,正如前面所指出的,它更有效,而且即使您还没有足够的舒适感来使用它,也绝对值得您去熟悉它。
    //init the map
    Map<String, Book> dataMap = Maps.newHashMap();


    //insert record
    dataMap.put(bookId, book);


    //update record
    Optional<Book> bookOpt = Optional.ofNullable(dataMap.get(bookId));
    bookOpt.ifPresent(book->{
        book.setTitle(newTitle);
    });