Java8 新特性連載——用Lambda優雅的將List轉換為Map

我們先定一個示例類:

public class Cat {
private String name;
private String nickName;
private String favourite;
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
// 省略其他get和set
}

當我們需要將List按照name為Key,Cat為Value組織成Map時,在Java8之前,我們是這麼寫的:

List cats = new ArrayList();
Map<string> catMap = new HashMap<string>(cats.size());
for(Cat cat : cats) {
catMap.put(cat.getName(), cat);
}
/<string>/<string>

至少要四行代碼,那麼如果用Lambda來寫只需要一行就搞定了:

Map<string> catMap = cats.stream().collect(Collectors.toMap(Cat::getName, c -> c));
/<string>

若Value只要貓的愛好,可以這麼寫:

Map<string> catMap = cats.stream().collect(Collectors.toMap(Cat::getName, Cat::getFavourite));
/<string>

是不是可簡單!

當然關於容器的stream的更多用法,我會在後續的秘籍裡逐一介紹。


分享到:


相關文章: