前言
- 不知不覺間Java10TM都發(fā)布了寻行,看了下新特性点晴,好激動(dòng)啊感凤,然后回過頭來繼續(xù)工作,嘆一口氣粒督,看著這個(gè)已經(jīng)上線在改造過程中的Java7項(xiàng)目開始暗自神傷
- 總想找點(diǎn)代碼來寫陪竿,可是這些年太依賴客戶了,客戶不說屠橄,不要求族跛,自己日常都不知道敲點(diǎn)什么,于是只能從最簡單的模范锐墙,照搬開始了
- 在掘金上找些小Demo礁哄,一個(gè)個(gè)的試驗(yàn)完了,這里只留下源碼溪北,留給自己以后看下桐绒,留給你去搬運(yùn)下,感受下函數(shù)式編程和流式API的體會(huì)了
Lambda
小實(shí)例
new Thread(()-> System.out.println("In Java8, Lambda expression rocks !!")).start();
語法
(params) -> expression
(params) -> statement
(params) -> { statements }
列表迭代
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
//使用Lambda表達(dá)式
features.forEach(n -> System.out.println(n));
//使用方法引用
features.forEach(System.out::println);
filter
public class LamThread {
public static void main(String[] args) {
List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
System.out.println("Languages which starts with J :");
streamFilter(languages,(str)->((String)str).startsWith("J"));
streamFilter(languages,(str)->true);
}
public static void filter(List<String> names, Predicate condition){
for (String name:
names) {
if (condition.test(name)){
System.out.println(name+" ");
}
}
}
public static void streamFilter(List<String> names,Predicate condition){
names.stream().filter((name)->(condition.test(name))).forEach((name)->{
System.out.println(name+" ");
});
}
}
StreamAPI的Map和Reduct方法
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
Object o = costBeforeTax.stream().map(
(cost) -> (int) cost + (int) cost * .12
).reduce(
(sum, cost) -> (double)sum + (double)cost).get();
System.out.println(o);
對列表每個(gè)單元應(yīng)用函數(shù)
List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada");
String collect = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", "));
System.out.println(collect);
復(fù)制不同的值之拨,創(chuàng)建一個(gè)子列表
List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
List<Integer> integerList = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
System.out.printf("原來是:%s,后來是 %s%n",numbers,integerList);