Java 将实体结构映射到使用流的映射

Java 将实体结构映射到使用流的映射,java,java-stream,collectors,Java,Java Stream,Collectors,我拥有以下实体: public class Library { String name; Set<Book> books; } public class Book { String isbn; String title; } 但是我刚刚得到了一张列表的地图 有什么想法吗?蒂亚 由于您从一个列表开始,因此可能需要将收集器.toMap()与两个映射函数结合使用: 键的库->字符串映射器(返回name) 值的库->映射器 对于第二个映射器,您可能希望将集的书籍流化,再次

我拥有以下实体:

public class Library {
  String name;
  Set<Book> books;
}

public class Book {
  String isbn;
  String title;
}
但是我刚刚得到了一张
列表的
地图


有什么想法吗?蒂亚

由于您从一个
列表开始
,因此可能需要将
收集器.toMap()
与两个映射函数结合使用:

  • 键的库->字符串映射器(返回
    name
  • 值的库->映射器
  • 对于第二个映射器,您可能希望将
    的书籍流化,再次使用2个(不同)映射功能将它们收集到类似于“外部”映射的
    映射中:

  • 一本书->键的字符串映射器(返回
    isbn
  • 值的标识映射器(返回书本本身)
  • 比如:

    List<Library> libs;
    // populate the libraries
    Map<String,Map<String,Book>> map = libs.
        stream().
        collect(Collectors.toMap(l -> l.name, l -> {
            return l.books.
                stream().
                collect(Collectors.toMap(b -> b.isbn, Function.identity()));  
        }));
    
    列出libs;
    //填充库
    Map=libs。
    流()。
    collect(Collectors.toMap(l->l.name,l->{
    归还我的书。
    流()。
    collect(Collectors.toMap(b->b.isbn,Function.identity());
    }));
    

    列出LIB

    使用方法引用和静态导入:

    import static java.util.stream.Collectors.toMap;
    
    Map<String, Map<String, Book>> map = libs.stream().collect(
            toMap(Library::getName, 
                    l -> l.getBooks().stream().collect(
                            toMap(Book::getIsbn, b -> b))));
    
    导入静态java.util.stream.Collectors.toMap;
    Map Map=libs.stream().collect(
    toMap(库::getName,
    l->l.getBooks().stream().collect(
    toMap(Book::getIsbn,b->b));
    
    你从什么开始?单个
    实例?一个
    列表
    ?@Mureinik和一个
    列表
    到目前为止你写了什么代码?你被困在哪里了?@Michael:我刚刚用一个代码示例更新了我的问题。谢谢!就这样!
    List<Library> libs;
    // populate the libraries
    Map<String,Map<String,Book>> map = libs.
        stream().
        collect(Collectors.toMap(l -> l.name, l -> {
            return l.books.
                stream().
                collect(Collectors.toMap(b -> b.isbn, Function.identity()));  
        }));
    
    import static java.util.stream.Collectors.toMap;
    
    Map<String, Map<String, Book>> map = libs.stream().collect(
            toMap(Library::getName, 
                    l -> l.getBooks().stream().collect(
                            toMap(Book::getIsbn, b -> b))));