https://blog.csdn.net/haiyoung/article/details/52693212
https://www.cnblogs.com/jacksontao/p/8608291.html
https://blog.csdn.net/op134972/article/details/76408237?locationNum=1&fps=1
/**
函數式接口
*/
package com.star.wechat;
@FunctionalInterface
public interface Jdk8Interface {
public void method(String s1,String s2);
}
package com.star.wechat;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@FunctionalInterface // 新特性2 函數式接口 只允許一個抽象方法
public interface Demo {
public void oldMethod(String la);
public default void test2(){ // 新特性1 接口內的default方法 ,可定義方法體
System.out.println("我是新特性1");
}
public static void main(String[] args) {
/*new Demo() {
@Override
public void oldMethod() {
System.out.println("老方法");
}
}.oldMethod();*/
/**
* lambda 1
*/
Demo d = la -> System.out.println("真牛皮"+la); // 新特性3 lambda表達式
// Demo d = (la) -> System.out.println("真牛皮"+la); // 參數可以用()括號括起來, 當有參數時可以去掉括號;
d.oldMethod("搞一下");
/**
* lambda 2
*/
Runnable r1 = () -> System.out.println("線程開始"); // 無參數時必須加上括號
//new Thread(r1).start();
new Thread(() -> System.out.println("這麼屌的嗎,直接一個括號????")).start();
/**
* lambda 3 不帶參數
*/
List<String> list =Arrays.asList("aaa","fsa","ser","eere");
Collections.sort(list, (a,b)-> Integer.parseInt(String.valueOf(b.compareTo(a)+1)));
for (String string : list) {
System.out.println(string);
}
/**
* lambda 4 帶參數
*/
List<String> list2 =Arrays.asList("aaa","fsa","ser","eere");
//List<Object> list2 =Arrays.asList("aaa","fsa","ser","eere"); 錯誤 list泛型需要與後面的comparator泛型相同
Collections.sort(list2, (Comparator<? super String>) (String a,String b)->{
return b.compareTo(a);
}
);
for (String string : list) {
System.out.println(string);
}
/**
* lambda 5 允許使用外部變量(自動且隱性的給外部變量用final修飾),相當於內部類
*/
int count =0;
Jdk8Interface j8 = (s1,s2) -> System.out.println(s1+s2+count);
j8.method("參數1", "參數2");
new Jdk8Interface() {
@Override
public void method(String s1, String s2) {
System.out.println(s1+s2+count);
//count = 5; 會報錯 證明是final的
}
}.method("參數1", "參數2");;
}
}