使用 RxJava 使用 2 个键将 List<Object> 转换为 List<Map>

convert List<Object> to List<Map> with 2 keys using RxJava

我有一个对象列表,我想将其转换为具有 2 个键的地图列表。

代码示例

// list of books (objects)
List<Book> books = new ArrayList<>();
books.add(new Book(1, 6));
books.add(new Book(2, 2));
books.add(new Book(3, 9));
books.add(new Book(4, 18));

List<Map<String, Object>> booksMap = Collections.emptyList();

// convert list into list of maps using regular for-loop
// map structure with 2 keys
for (Book book : books) {
    Map<String, Object> map = new HashMap<>();
    map.put("id", book.getId());
    map.put("quantity", book.getQuantity());

    booksMap.add(map);
}

因此每个对象(书籍)都必须转换为包含 2 个键的 Map。

我的问题是如何使用 RxJava 做到这一点

所以你想订阅一个使用 fromIterable 便捷方法创建的 Observable,它接收你的书籍列表,然后它会一个接一个地发出项目,然后每个项目转换成一个 Map 最后分组使用 toList 运算符将它们放在列表中。

    Observable.fromIterable(books)
    .map(new Function<Book, Map<String, Object>>() {
        @Override
        public Map<String, Object> apply(Book book) throws Exception {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("id", book.id);
            map.put("quantity", book.quantity);
            return map;
        }
    })
    .toList()
    .subscribe(new Consumer<List<Map<String, Object>>>() {
        @Override
        public void accept(List<Map<String, Object>> mapsList) throws Exception {
            System.out.println(mapsList);
        }
    });