【发布时间】:2019-02-11 22:54:46
【问题描述】:
我遇到了需要将List<Book> 转换为Map<String, Book> 的情况,我能找到的唯一解决方案是如何执行Map<String, List<Book>>。
类本身看起来如下(我省略了 getter/setter 和构造函数):
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 达到同样的效果?
【问题讨论】:
标签: java java-8 java-stream