1
votes

mise à jour de la valeur d'un objet dans une liste d'objets

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


2 commentaires

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


5 Réponses :


0
votes

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*/);
  }
}


2 commentaires

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).



1
votes

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)
  );
}


0 commentaires

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

0 commentaires

0
votes

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);
}


0 commentaires

0
votes

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);
}


0 commentaires