更新对象列表中的对象的值

时间:2019-03-10 12:56:49

标签: java java-8

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

我有一堂课“书”

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的解决方案,那就太好了

5 个答案:

答案 0 :(得分:1)

您可以在流列表上使用过滤器,然后只需更新计数即可

public void updateCount(String bookName, int updateBy) {
  books.stream().filter(book -> book.getName().equals(bookName)).forEach(
      book -> book.setCount(book.getCount() + updateBy)
  );
}

答案 1 :(得分:0)

您可以像下面那样遍历列表,并且为了更新对象值,您可以根据需要提供条件或使用数组的Index。假设您需要更新价格在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*/);
  }
}

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

您链接的updateCount方法似乎只是创建了一个图书清单,我不确定您要在此处做什么,但是也许该方法应该返回List<Book>以便您可以创建您主要功能中的书籍清单?如果这样做,则可以创建一个新方法,可以在其中传递列表,要在该列表中更新的索引以及该书的新计数值,如下所示:

private void updateBookCount(List<Book> books, int booksIndex, int newCount)
{
     if (books.size() > booksIndex)
         books.get(booksIndex).setCount(newCount);
}

答案 4 :(得分:0)

简单明了的方法:

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