<commit_before>---
layout: post
title:  "Cocktail American"
date:   2016-02-17 22:57:00 +0800
categories: cocktail
tags: [cocktail, campari,sweet-vermouth]
---

平常偶爾會喝調酒 or 葡萄酒 , 想說用這邊記錄調過的酒

[IBA 酒譜](https://en.wikipedia.org/wiki/Americano_(cocktail))

* 3 cl Campari
* 3 cl red vermouth
* A splash of soda water

[癮形人酒譜](http://enjoyer.pixnet.net/blog/post/32512960-%E7%BE%8E%E5%9C%8B%E4%BD%AC%EF%BC%88americano%EF%BC%89)

多加了君度澄酒

----

心得 : 算滿好入口的一個酒款 , Campari 本身苦中帶有甜味 , 加上sweet-vermouth後 , 味道更偏甜. 因蘇打水的關係使得酒味不重 , 適合當男性迎賓款.
<commit_msg>fix post Tree Traversal by Guava<commit_after>---
layout: post
title:  "Tree Traversal by Guava"
date:   2016-02-17 23:07:00 +0800
categories: algorithms
tags: [algorithms,tree-traversal,guava]
---

非本科的關係 , 對於演算法並沒有那麼熟悉 , 但電腦科學的東西寫久了 , 總是會遇到演算法的問題 , 因為是基礎.

工作or現實的關係 , 常在處理樹狀結構資料 , 但每當要針對樹狀資料進行迭代處理時 , 常常都是透過遞迴處理.

用遞迴寫的缺點.

* 迭代處理如果過程稍微不一樣的話 , 就需要另寫遞迴 , 之後就常常見到一堆很像但細節不太一樣的遞迴.

工作過程一直覺得展出資料及組回樹狀資料應該可以更normalize.後來就在Guava上看到有現成的Tree Traversal Library, 試用了一下覺得很不錯.

----

下面為範例

使用Guava進行迭代的話 , 需要先在Class宣告一個TreeTraverser物件

~~~ java

private static final TreeTraverser<Tree> ADAPTER = new TreeTraverser<Tree>() {
        @Override
        public Iterable<Tree> children(Tree node) {
            return node.getChildren();
        }
    };

~~~

實際迭代的時候只有一行即可將樹狀物件轉成List結構

~~~ java

Tree root = new Tree('h');
Tree d = new Tree('d', root);
Tree a = new Tree('a', d);
Tree b = new Tree('b', d);
Tree c = new Tree('c', d);
Tree e = new Tree('e', root);
Tree g = new Tree('g', root);
Tree f = new Tree('f', g);

List<Tree> treeList = ADAPTER.preOrderTraversal(root).toList();

~~~

----

心得 : Guava真的很好用.

----
參考資料
[小殘的程式光廊](http://emn178.pixnet.net/blog/post/95499086-tree-traversal(%E6%A8%B9%E7%9A%84%E8%B5%B0%E8%A8%AA)
[Wikipedia](https://en.wikipedia.org/wiki/Tree_traversal)
[RosettaCode-Tree_traversal](https://rosettacode.org/wiki/Tree_traversal)

{'fraction_non_alphanumeric': 0.1518186610437533, 'fraction_numerical': 0.04164470216130733, 'mean_word_length': 4.43839541547278, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5924305', 'n_tokens_mistral': 1139, 'n_tokens_neox': 1145, 'n_words': 149}