我遇到了这样的情况,需要将 List<Book>
转换为 Map<String, Book>
,但是我找到的唯一解决方案是如何转换 Map<String, List<Book>>
。
该类本身的代码如下(我省略了 getters/setters 和 constructors):
public class Book {
private String asin;
private String author;
private String title;
}
我希望通过某些唯一的键来映射所有的书籍,这样重复的概率要么可以忽略不计,要么为0
。
我曾尝试过以下方式:
Map<String, Book> booksByAsinAndTitle = books.stream()
.collect(Collectors.groupingBy((book) -> book.getAsin() + "||" + book.getTitle()))
.entrySet()
.stream()
.collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue().get(0)));
这段代码虽然能够运行,但是它看起来很丑陋,难以阅读并且不够优美,如果继续使用的话可能会让我的同事感到困惑。是否有更好的Java 8
方法可以实现相同的结果呢?
(a,b) -> a
是否保证.get(0)
? - NamangroupingBy
保留了顺序。https://dev59.com/9VkT5IYBdhLWcg3wB7Es - Naman