Je dois mettre à jour un champ d'un objet dans une liste d'objets
J'ai une classe "Book"
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 }
maintenant j'ai une méthode updateCount p>
class Book{ String name ; int count; ....constructor .. getter setters }
Si quelqu'un a une solution utilisant java 8. ce serait génial
5 Réponses :
vous pouvez parcourir la liste comme suit et pour mettre à jour la valeur de l'objet, vous pouvez fournir une condition ou utiliser l'index du tableau selon vos besoins. supposons que vous ayez besoin de mettre à jour un livre dont le prix est compris entre 100 et 7500, vous pouvez faire ce qui suit.
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*/); } }
s'il y en a cent non. d'entrée alors qu'est-ce que vous pensez que ce sera une bonne solution ??
C'est une recherche linéaire, et c'est une méthode de base par laquelle vous pouvez mettre à jour la valeur. si vous voulez rechercher la valeur, vous pouvez utiliser hashmap, ce sera la meilleure solution pour ce genre de pratique. la complexité temporelle sera réduite à O (1) au lieu de O (n).
Vous pouvez utiliser le filtre sur la liste diffusée, puis simplement mettre à jour le nombre
public void updateCount(String bookName, int updateBy) { books.stream().filter(book -> book.getName().equals(bookName)).forEach( book -> book.setCount(book.getCount() + updateBy) ); }
Optional<Book> book2 = books.stream().filter(book -> book.getName().equals("book2")).findFirst(); book2.ifPresent(book -> book.setCount(3));
La méthode updateCount
que vous avez liée semble simplement créer une liste de livres, je ne sais pas exactement ce que vous essayez de faire ici mais peut-être que cette méthode devrait renvoyer List
afin que vous puissiez créer une liste de livres dans votre fonction principale? Si vous faites cela, vous pouvez créer une nouvelle méthode dans laquelle vous pouvez lui transmettre votre liste, l'index que vous souhaitez mettre à jour dans cette liste et la nouvelle valeur de comptage pour ce livre, quelque chose comme ceci:
private void updateBookCount(List<Book> books, int booksIndex, int newCount) { if (books.size() > booksIndex) books.get(booksIndex).setCount(newCount); }
Façon simple et claire de le faire:
public void updateCount(List<Book> books) { books.stream() .filter(book -> book.getName().equals("book2")) .findFirst() .get() .setCount(3); }
Voulez-vous dire que vous souhaitez ajouter un nouvel objet Livre dans la liste existante de Livre?
non je veux juste mettre à jour le nombre de book2