如今纔來瞭解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); } }