《寫給大忙人看的java se 8》筆記

如今纔來瞭解java8,是否是後知後覺了點?javascript

新的編程技術,我的不喜歡第一時間跟進,待社區已有實踐積澱再切入彷佛更划算些?html

一點點精明的考慮。 很少說,上代碼。java

//讀《寫給大忙人看的java se 8》作的筆記代碼
//但願對忙到連這書都沒工夫看的你,匆匆一瞥,留下印象
//首發於page.427studio.net/blog/blog_1471272707203.html
//祝編程愉快
public class MainTest {

    //第一章,講lambda表達式
    //lambda表達式相似javascript的函數字面量,可用於替代java的匿名內部類
    //基本型爲 (形參列表)->{方法體},有多種簡寫方式,不贅
    //某個方法指定了接口參數時,便可將lambda表達式傳入
    private static void c1(){
        List<Integer> l = Arrays.asList(1, 2, 3);

        //功能不言自明
        //forEach後面會講,這裏臉熟一下
        l.forEach(i -> print(i));

        //另外,如今接口能夠聲明默認方法了
        //因此,舊的接口+默認抽象類的二重聲明,能夠合爲只聲明個接口
    }

    //第二章,Stream簡化集合使用
    private static void c2(){
        //過濾,能夠理解爲sql的where子句
        List<Integer> l = Arrays.asList(1, 2, 3);
        long bigNumberCount = l.stream().filter(i -> i % 2 == 1).count();//順便演示了聚合
        print(bigNumberCount);//2

        //投影,能夠理解爲sql的指定列子句
        Stream<Integer> plusOne = l.stream().map(i -> i+1);
        plusOne.forEach(i -> print(i));//2,3,4

        //聚合上面已演示,能夠理解爲sql的count/avg/max/min語法

        //收集爲{1:2, 2:3, 3:4}的字典
        Map<Integer, Integer> result = 
                l.stream().collect(Collectors.toMap(i -> i, i -> i+1));
        result.forEach((k,v) -> print(k+":"+v));//順便演示多個形參的lambda
    }

    //第五章,講新的日期時間API
    private static void c5(){
        //日期
        LocalDate today = LocalDate.now();
        print(today);//2016-08-15
        LocalDate birthday = LocalDate.of(1988, 10, 31);
        print(birthday);//1988-10-31
        //LocalDate有一些plusDays withDayOfMonth等實用方法

        //時間
        LocalTime time = LocalTime.of(10, 31);
        print(time);//10:31
        //LocalTime有一些plusHours withMinute等實用方法

        //日期時間
        LocalDateTime dateTime = LocalDateTime.now();
        print(dateTime);//2016-08-15T21:46:01.719

        //日期轉字符串,使用默認格式
        print(DateTimeFormatter.ISO_DATE.format(birthday));
        //字符串轉日期,使用自定義格式
        DateTimeFormatter myFormatter = DateTimeFormatter.ofPattern("yyyy..MM..dd");
        LocalDate fromStr = (LocalDate)LocalDate.parse("1988..10..31", myFormatter);
        print(fromStr);

        //與老Date互轉
        Date oldClass = Date.valueOf(birthday);
        LocalDate newClass = oldClass.toLocalDate();
    }

    //雜項的改進
    private static void c8(){
        //String添加join
        String whoIsHero = String.join(",", "曹操", "劉備", "孫權");
        print(whoIsHero);

        //Iterable添加forEach
        Arrays.asList("關羽", "張飛", "趙雲").forEach(i -> print(i));

        //方便地讀取文件內容
        Path path = Paths.get("/juqiuwang_logs", "juqiuwang.log");//順便演示Path使用
        try(Stream<String> lines = Files.lines(path)){//順便演示自動關閉資源
            lines.forEach(s -> print(s));
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }

    //java7特性
    private static void c9(){
        //自動關閉資源的try(xx)寫法在c9中已演示

        //路徑Path在c9中也用過了
        //方便地讀取文件內容
        try{
            List<String> lines = Files.readAllLines(Paths.get("/juqiuwang_logs", "juqiuwang.log"));
            lines.forEach(s -> print(s));
            //Files另外還有些實用方法,不贅
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args){
        c1();
        c2();
        //第3章講lambda的應用,請看書
        //第4章講JavaFX,如感興趣請看書
        c5();
        //第6章講併發,如感興趣請看書
        //第7章講javascript引擎,如感興趣請看書
        c8();
        c9();
    }

    private static void print(Object o){
        System.out.println(o);
    }

}
相關文章
相關標籤/搜索