若是看完以爲對您有幫助到,麻煩關注一下,您的關注是我繼續更新的動力。謝謝!!java
函數式接口api
Lambda表達式是如何在java的類型系統中表示的呢?每個lambda表達式都對應一個類型,一般是接口類型。而「函數式接口」是指僅僅只包含一個抽象方法的接口,每個該類型的lambda表達式都會被匹配到這個抽象方法。由於 默認方法 不算抽象方法,因此你也能夠給你的函數式接口添加默認方法。dom
咱們能夠將lambda表達式看成任意只包含一個抽象方法的接口類型,確保你的接口必定達到這個要求,你只須要給你的接口添加 @FunctionalInterface 註解,編譯器若是發現你標註了這個註解的接口有多於一個抽象方法的時候會報錯的。ide
示例以下:函數
@FunctionalInterfaceinterface Converter<F, T> { T convert(F from);}Converter<String, Integer> converter = (from) -> Integer.valueOf(from);Integer converted = converter.convert("123");System.out.println(converted); // 123
須要注意若是@FunctionalInterface若是沒有指定,上面的代碼也是對的。測試
譯者注 將lambda表達式映射到一個單方法的接口上,這種作法在Java 8以前就有別的語言實現,好比Rhino JavaScript解釋器,若是一個函數參數接收一個單方法的接口而你傳遞的是一個function,Rhino 解釋器會自動作一個單接口的實例到function的適配器,典型的應用場景有 org.w3c.dom.events.EventTarget 的addEventListener 第二個參數 EventListener。編碼
stream及它關聯的方法spa
System.out.println("====================jdk1.8版本前新特性Lambda,list遍歷======================");測試結果:
String[] strArr={"one","tow","three","five"};
List<String> strList = Arrays.asList(strArr);
//定義filters
Predicate<String> strFilter=(str)->(str.length()<=4);
Predicate<String> filterStr=(s)->(s.length()>3);
strList.stream()
.filter(strFilter)
.filter(filterStr)
.forEach((strlist)-> System.out.println(strlist));
}
//定義filters測試結果:
System.out.println("====================jdk1.8版本前新特性Lambda,list遍歷======================");
String[] strArr={"one","tow","three","five"};
List<String> strList = Arrays.asList(strArr);
strList.stream().limit(2).forEach((str)-> System.out.println(str));
}
//定義filters四、獲取最大最小值:min()和max()
System.out.println("====================jdk1.8版本前新特性Lambda,list遍歷======================");
String[] strArr={"one","tow","three","five"};
List<String> strList = Arrays.asList(strArr);
ArrayList<String> list = new ArrayList<>();
// strList.stream().limit(2).forEach((str)-> System.out.println(str));
strList.stream()
.sorted((str01,str02)->(str01.length()-str02.length()))
.collect(toList());
System.out.println("====================jdk1.8版本前新特性Lambda,list遍歷======================");
String[] strArr={"one","tow","three","five","eightt"};
List<String> strList = Arrays.asList(strArr);
//獲取最大和最小
String s = strList.stream().min((s1, s2) -> (s1.length() - s2.length())).get();
System.out.println(s);
System.out.println("========================================");
String ss=strList.stream().max((s3,s4)->(s3.length()-s4.length())).get();
System.out.println(ss);
public class LambdaTest {二、list遍歷
public static void main(String[] args) {
List<String> names= Arrays.asList("peter","anna","nike","xenia");
//jdk1.8前的編碼
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
for (String str:names){
System.out.println(str);
}
System.out.println("====================jdk1.8新特性Lambda======================");
Collections.sort(names,(String a,String b)->{return b.compareTo(a);});
for (String str:names){
System.out.println(str);
}
System.out.println("====================jdk1.8新特性Lambda,最簡表達式======================");
Collections.sort(names,(a,b)->a.compareTo(b));
for (String str:names){
System.out.println(str);
}
}
}
System.out.println("====================jdk1.8版本前新特性Lambda,list遍歷======================");
String[] strArr={"one","tow","three"};
List<String> strList = Arrays.asList(strArr);
for (String str:strList){
System.out.println(str);
}
System.out.println("====================jdk1.8版本新特性Lambda,list遍歷,表達式一======================");
strList.forEach((str)-> System.out.println(str+"; "));
System.out.println("====================jdk1.8版本新特性Lambda,list遍歷,表達式二======================");
strList.forEach(System.out::println);
}
package com.bbtree.project.api;
/**
* Created by Administrator on 2017/1/3.
*/
public interface Animal {
void printName(String animalName);
default void eat(String animalName){
System.out.println(animalName+"準備進食");
}
default void run(String animalName){
System.out.println(animalName+"跑起來!");
}
}
package com.bbtree.project.api.impl;
import com.bbtree.project.api.Animal;
/**
* Created by Administrator on 2017/1/3.
*/
public class AnimalImpl implements Animal {
@Override
public void printName(String animalName) {
System.out.println("這是一隻"+animalName);
}
}
public class JDKTest {
@Test
public void animalTest(){
AnimalImpl animal = new AnimalImpl();
animal.printName("豬");
System.out.println("========上面爲繼承方法,下面爲jdk1.8中新特性,非抽象方法======");
animal.eat("豬");
animal.run("狗");
}
}