2016-11-03 4 views
0

Ich mag im Grunde dies zu einem beobachtbarenaktualisieren einzige Liste Artikel RXJava

for-Schleife konvertieren
private static List<Book> books 

public static void replaceBook(Book book) { 
    for (int i = 0; i < books.size(); i++) { 
     if (books.get(i).getId().equals(book.getId())) { 
      books.set(i, book); 
     } 
    } 
} 

Das ist, was ich habe bisher aber seine Arbeit nicht. Ich dachte, der Kartenoperator würde das gefilterte Objekt aktualisieren, aber mir scheint etwas zu fehlen.

Observable.from(books).filter(new Func1<Book, Boolean>() { 
     @Override 
     public Boolean call(Book b) { 
      return b.getId().equals(book.getId()); 
     } 
    }).map(new Func1<Book, Book>() { 
     @Override 
     public Book call(Book b) { 
      return book; 
     } 
    }).subscribe(); 

aktualisieren

Basierend auf Boris und Tassos die Antworten bekam ich folgende Antwort, die

Observable.from(books) 
      .map(b -> b.getId().equals(book.getId()) ? book : b) 
      .toList() 
      .subscribe(s -> books = s); 
+0

wollen Sie 'Filter' einige Elemente aus 'Liste scheint zu funktionieren '? Oder ersetzen Sie ein Buch in der Liste und in der Rückgabeliste? –

+0

Ich möchte das Listenelement ersetzen und die Liste zurückgeben. – sirFunkenstine

Antwort

1
Observable 
    .from(books) 
    .map(b -> b.getId().equals(book.getId()) ? book : b) 
    .subscribe(); 
+0

Das scheint die Liste Bücher nicht zu aktualisieren, sobald es fertig ist. Muss ich etwas in subscribe hinzufügen, um die Instanz der Liste zu aktualisieren? – sirFunkenstine

+0

Verwenden Sie Rx nicht dafür, da es nicht das richtige Werkzeug für den Job ist - Rx eignet sich für einen funktionelleren Stil mit weitgehend unveränderlichen Datenstrukturen. Ansonsten mach einfach eine .toList(). –

+0

Alternativ verwenden Sie 'books.replaceAll (b -> b.getId(). Equals (Buch.getId())? Buch: b);' –

2
Observable 
    .from(books) 
    .map(new Func1<Book, Book>() { 
     @Override 
     public Book call(Book b) { 
      if (book.getId().equals(b.getId())) 
       return book; 
      return b; 
     } 
    }) 
    .toList() 
    .subscribe(); 
Verwandte Themen