为了账号安全,请及时绑定邮箱和手机立即绑定

更新对象列表中对象的值

更新对象列表中对象的值

守着星空守着你 2022-07-27 09:39:31
我必须更新对象列表中的对象字段我有一堂“书”class Book{   String name ;   int count;  ....constructor  .. getter setters}现在我有一个方法 updateCountpublic 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 的解决方案,那就太好了
查看完整描述

5 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您可以在流列表上使用过滤器,然后简单地更新计数


public void updateCount(String bookName, int updateBy) {

  books.stream().filter(book -> book.getName().equals(bookName)).forEach(

      book -> book.setCount(book.getCount() + updateBy)

  );

}


查看完整回答
反对 回复 2022-07-27
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

books.stream().filter(book -> book.getName().equals("book2")).findFirst().get().setCount(3);

但是,NoSuchElementException如果 book2 在 List 中不存在,它会抛出。这就是为什么你应该使用Optional.isPresent()检查。

Optional<Book> book2 = books.stream().filter(book -> book.getName().equals("book2")).findFirst();
book2.ifPresent(book -> book.setCount(3));

请注意,我也在寻找第一个 found book2。如果要查找Book具有特定名称的所有内容,则应使用foreach语法而不是findFirst.


查看完整回答
反对 回复 2022-07-27
?
Helenr

TA贡献1780条经验 获得超4个赞

简单明了的方法:

public void updateCount(List<Book> books) {
    books.stream()
         .filter(book -> book.getName().equals("book2"))
         .findFirst()
         .get()
         .setCount(3);}


查看完整回答
反对 回复 2022-07-27
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以像下面那样遍历列表,并且为了更新对象值,您可以根据需要提供条件或使用数组的索引。假设您需要更新一本价格为 100 到 7500 的书,您可以执行以下操作。


for (Book book : books){

  if( book.getPrice() == 100){

       book.setPrice(7500);

  }

}


// if you want to update the book2's number, then

for (Book book: books){

  if( book.getName() == "Book2"){

      book.setNumber(/*set number here*/);

  }

}


查看完整回答
反对 回复 2022-07-27
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您链接的updateCount方法似乎只是创建了一个书籍列表,我不确定您要在这里做什么,但也许该方法应该返回List<Book>,以便您可以在主函数中创建一个书籍列表?如果你这样做,那么你可以创建一个新方法,你可以将你的列表传递给它,你想要在该列表中更新的索引以及该书的新计数值,如下所示:


private void updateBookCount(List<Book> books, int booksIndex, int newCount)

{

     if (books.size() > booksIndex)

         books.get(booksIndex).setCount(newCount);

}


查看完整回答
反对 回复 2022-07-27
  • 5 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信