更新对象列表中对象的值

我必须更新对象列表中的对象字段


我有一堂“书”


class Book{

   String name ;

   int count;

  ....constructor

  .. getter setters

}

现在我有一个方法 updateCount


public void updateCount() {

  List<Book> books = new ArrayList<Book>() {

   {

     add(new Book("Book1", 1));

     add(new Book("Book2" , 2));


     // it can be more than 2 and in any manner not in any defined sequence  but we can

     // identify with the book name

   }

}


public static void main(String[] args) {

   /// now i have to update the value of count to 3 in book2

   /// how can I update

}

如果有人有使用 java 8 的解决方案,那就太好了


守着星空守着你
浏览 110回答 5
5回答

手掌心

您可以在流列表上使用过滤器,然后简单地更新计数public void updateCount(String bookName, int updateBy) {&nbsp; books.stream().filter(book -> book.getName().equals(bookName)).forEach(&nbsp; &nbsp; &nbsp; book -> book.setCount(book.getCount() + updateBy)&nbsp; );}

30秒到达战场

books.stream().filter(book&nbsp;->&nbsp;book.getName().equals("book2")).findFirst().get().setCount(3);但是,NoSuchElementException如果 book2 在 List 中不存在,它会抛出。这就是为什么你应该使用Optional.isPresent()检查。Optional<Book>&nbsp;book2&nbsp;=&nbsp;books.stream().filter(book&nbsp;->&nbsp;book.getName().equals("book2")).findFirst(); book2.ifPresent(book&nbsp;->&nbsp;book.setCount(3));请注意,我也在寻找第一个 found&nbsp;book2。如果要查找Book具有特定名称的所有内容,则应使用foreach语法而不是findFirst.

Helenr

简单明了的方法:public&nbsp;void&nbsp;updateCount(List<Book>&nbsp;books)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;books.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(book&nbsp;->&nbsp;book.getName().equals("book2")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.findFirst() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.get() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setCount(3);}

qq_笑_17

您可以像下面那样遍历列表,并且为了更新对象值,您可以根据需要提供条件或使用数组的索引。假设您需要更新一本价格为 100 到 7500 的书,您可以执行以下操作。for (Book book : books){&nbsp; if( book.getPrice() == 100){&nbsp; &nbsp; &nbsp; &nbsp;book.setPrice(7500);&nbsp; }}// if you want to update the book2's number, thenfor (Book book: books){&nbsp; if( book.getName() == "Book2"){&nbsp; &nbsp; &nbsp; book.setNumber(/*set number here*/);&nbsp; }}

慕婉清6462132

您链接的updateCount方法似乎只是创建了一个书籍列表,我不确定您要在这里做什么,但也许该方法应该返回List<Book>,以便您可以在主函数中创建一个书籍列表?如果你这样做,那么你可以创建一个新方法,你可以将你的列表传递给它,你想要在该列表中更新的索引以及该书的新计数值,如下所示:private void updateBookCount(List<Book> books, int booksIndex, int newCount){&nbsp; &nbsp; &nbsp;if (books.size() > booksIndex)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;books.get(booksIndex).setCount(newCount);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java