若是看完以为对您有帮助到,麻烦关注一下,您的关注是我继续更新的动力。谢谢!!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("狗");
}
}