简体   繁体   English

更新单个列表项RXJava

[英]Update single list item RXJava

I basically want to convert this for loop to an Observable 我基本上想将此for循环转换为Observable

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

This is what I have so far but its not working. 到目前为止,这是我所拥有的,但是没有用。 I thought the map operator would update the filtered item but I seem to be missing something. 我以为地图操作员会更新过滤后的项目,但似乎丢失了一些东西。

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

Update 更新

Based on Boris and Tassos's answers I got the following answer which seems to work 根据鲍里斯和塔索斯的答案,我得到了以下似乎有效的答案

  Observable.from(books)
            .map(b -> b.getId().equals(book.getId()) ? book : b)
            .toList()
            .subscribe(s -> books = s);
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();
Observable
  .from(books)
  .map(b ->  b.getId().equals(book.getId()) ? book : b)
  .subscribe();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM