我必须更新对象列表中的对象字段
我有一堂课“书”
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的解决方案,那就太好了
答案 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);
}