gpt4 book ai didi

java - 使用流将实体结构映射到 map 的 map

转载 作者:行者123 更新时间:2023-12-03 04:09:07 24 4
gpt4 key购买 nike

我有实体:

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

public class Book {
String isbn;
String title;
}

现在我需要一个

Map<String, Map<String, Book>> mapByLibraryNameAndIsbn;

其中第一个Map的键是Library的名称,第二个Map的键是的isbn >预订

为此,我想使用 java 流和一些收集器。我尝试使用 groupingBy 和 toMap,但取得了成功。

更新1:

到目前为止我已经尝试过了

Map<String, List<Book>> libraryList.stream().collect(groupingBy(l -> l.getName(), toList()));

但我刚刚得到了 ListMap

有什么想法吗? TIA!

最佳答案

既然你从List<Library>开始,您可能想要组合 Collectors.toMap()有 2 个映射函数:

  1. 库 -> 键的字符串映射器(返回 name )
  2. 库 -> 值的映射器。

对于第二个映射器,您可能想要流式传输 Set书籍,将它们收集到 Map类似于“外部” map ,再次使用 2 个(不同的)映射函数:

  1. 一本书 -> 键的字符串映射器(返回 isbn )
  2. 值的身份映射器(返回书籍本身)。

所以类似:

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

列出库;

关于java - 使用流将实体结构映射到 map 的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37735738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com