LINQソースでGO!
In 名古屋MS系秋祭り 2013/09/21
* Containes too many aminatable elements, so broken look'n feel in slideshare.
http://www.kekyo.net/2013/09/21/%e5%90%8d%e5%8f%a4%e5%b1%8bms%e7%a7%8b%e7%a5%ad%e3%82%8a-linq%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%a7go/
LINQソースでGO!
In 名古屋MS系秋祭り 2013/09/21
* Containes too many aminatable elements, so broken look'n feel in slideshare.
http://www.kekyo.net/2013/09/21/%e5%90%8d%e5%8f%a4%e5%b1%8bms%e7%a7%8b%e7%a5%ad%e3%82%8a-linq%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%a7go/
プログラミング言語 Go は Google が 2009 年秋にオープンソースで公開した新しいプログラミング言語です。C や C++ のようなコンパイル言語の良さをもちつつ、Python のような動的言語でのプログラムの書き易さを兼ねそなえた特徴をもっています。クラスを使わないオブジェクト指向の言語で、コンカレントに実行するための仕組みもそなえています。 プログラミングをより速く、より生産的に、そしてより楽しくしてくれる新しいプログラミング言語 Go について説明します。
46. 完成
public class StringCollector implements Collector<String, StringCombiner, String> {
public Supplier<StringCombiner> supplier() {
return () -> new StringCombiner(delim, prefix, suffix);
}
public BiConsumer<StringCombiner, String> accumulator() {
return StringCombiner::add;
}
public BinaryOperator<StringCombiner> combiner() {
return StringCombiner::merge;
}
public Function<StringCombiner, String> finisher() {
return StringCombiner::toString;
}
}
47. Collection Niceties
1.Mapを使ってキャッシュしていた実装も
ラムダが導入されたお陰でシンプルに。
Mapに存在しない場合はDBに問い合わせるキャッシュの例
public Artist getArtist (String name) {
Artist artist = artistCache.get(name);
if (artist == null) {
artist = readArtistFromDB(name);
artistCache.put(name, artist);
}
return artist;
}
public Artist getArtist(String name) {
return artistCache.computeIfAbsent(name, this::readArtistFromDB);
}
computeIfAbsentメソッドで代替可能
48. 2.Mapを使ってのforeach分もシンプルに。
Map<Artist, Integer> countOfAlbums = new HashMap<>();
for(Map.Entry<Artist, List<Album>> entry : albumsByArtist.entrySet()) {
Artist artist = entry.getKey();
List<Album> albums = entry.getValue();
countOfAlbums.put(artist, albums.size());
}
Map<Artist, Integer> countOfAlbums = new HashMap<>();
albumsByArtist.forEach((artist, albums) -> {
countOfAlbums.put(artist, albums.size());
});