現在才來了解java8,是不是后知后覺了點?
新的編程技術,個人不喜歡第一時間跟進。
待社區已有實踐積淀再切入似乎更划算些?
一點點精明的考慮。 不多說,上代碼。
//讀《寫給大忙人看的java se 8》做的筆記代碼
//希望對忙到連這書都沒工夫看的你,匆匆一瞥,留下印象
//祝編程愉快
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);
}
}