發表文章

目前顯示的是 11月, 2019的文章

Java Lambda Collection/List篇

Java Lambda Collection/List篇 前言 這篇文章主要接續Lambda基礎篇,主要介紹與自我複習常用的Collection家族中的Lambda方法 Collection forEach forEach 是Iterable介面中的default Method原始碼如下 default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } 敲黑板 畫重點 Collection透過FunctionalInterface "Consumer"讓此介面可以透過lambda實踐。 Collection家族都有實作Iterable介面因此都可以使用此forEach方法。 實踐 private void forExample(List<String> example) { example.forEach(System.out::println); } 透過ArrayList實踐 System.out::println省列了不帶任何參數的method ()->,讓Lambda自動對物件使用此method removeIf removeIf是Collection介面本身的方法,原始碼如下 default boolean removeIf(Predicate<? super E> filter) { Objects.requireNonNull(filter); boolean removed = false; final Iterator<E> each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove();

Java interface "Default Methods"

前言 因為近期再深入研究Java Lambda,在研究Cosumer介面實發現了一件有趣的事情,以前看Java8以前的書籍都說介面不能包含實做,而現在Java8推出了Default Methods,讓開發人員可以在介面寫上有邏輯的方法了! Default Methods 主要是透過前綴字"default",像JVM告知這一個是介面中的Default Method,範例如下 public class DefaultMethodExample { public static void main(String[] args) { DefaultInterface exampleA = new ExampleA(); DefaultInterface exampleB = new ExampleB(); exampleA.methodA(); exampleB.methodA(); } public static class ExampleA implements DefaultInterface { @Override public void methodA() { System.out.println("Hi! I am methodA in ExampleA"); basicMethod(); } } public static class ExampleB implements DefaultInterface { @Override public void methodA() { System.out.println("Hi! I am methodA in ExampleB"); basicMethod(); } } public interface DefaultInterface { void methodA(); default void ba

Java Lambda 基礎

前言 Lambda語法對我而言較像是coding風格上的改變,讓程式碼風格更加地簡潔,如果程式碼更加簡潔那就代表 更容易被管理 容易管理代表容易擴張與除錯 容易擴張除錯也代表的迭代速度加快 速度加快代表產品更容易修改去符合使用者需求 產引更容易符合使用者需求代表公司賺大錢 我真心認為許多工程師常常覺得自己只是在寫Code,其實不然他們在幫助公司創造更多的機會養活更多的家庭與製造更多生產。 當然除了上述的優點之外,現在Java社群與官方也已經環繞著Lambda進行多種開發,這也代表使用Lambda可以讓工程師們減少重複的工作(而這些重複的工作Lambda提供的效能可能還比自己寫到好…汗顏) 內容中的原始碼可以參考我的GitHub! 點我! 甚麼是Lambda 先讓我們看一下使用Lambda前後的範例 無參數 使用執行續Print出字串 private void withoutLambda() { new Thread(new Runnable() { @Override public void run() { System.out.println("Hi! This function isn't using lambda"); } }).start(); } private void withLambda() { new Thread(() -> System.out.println("Hi! This function is using lambda") ).start(); } 有參數 將較長的字串往後移動 private void hasParameter() { List<String> list = Arrays.asList("Hi", "my", "name", "is", "Charlie");

名詞解釋 FTP/sFTP(SSH)

FTP File Transfer Protocol 簡單來說就是檔案傳輸的協定,我其實常常思考甚麼是協定,直到深入理解Java interface概念後,其實協定就跟interface一樣他沒有太多的功能,他是訂出一個標準只要大家都符合這個標準那大家都可以進行傳輸。 FTP原理與應用 原理 主要透過軟體FTP client與server進行協定上的連線(可以透過許多網路資源得到相關的應用程式) 應用 對於系統整合商而言檔案傳輸幾乎是每天都在使用的,要將每個子系統的產出資料傳進中心資料倉儲,然爾每個子系統大多都是已經誕生許久不是說改就改,於是只要大家乖乖的把檔案丟到FTP server上那我們系統整合商就有辦法將資料拿出來並且整合利用。 SSH Secure Shell (安全外殼協定簡稱SSH) - 加密的網路傳輸協定,在不安全的網路中為網路服務提供安全的傳輸環境,最常見的用途是遠端登入系統 SSH的原理 SSH以非對稱加密實現身分驗證,自動生成公鑰-私鑰對來加密網路連接或是透過人工生成的方法產出公私鑰 SSH的應用 FTP -> sFTP : 將FTP協定透過SSH安全殼機制讓傳遞的檔案不會輕易的被竊取。這也是目前大多系統的做法,甚至是唯一做法。 資源 SSH - Secure Shell wiki