以下有5种表达式:
- 不需要参数,返回为5
() -> 5- 接收一个参数(数字类型),返回其2倍的值
x -> 2*x- 接收2个参数(数字),并返回它们的差值
(x, y) -> x-y- 接收2个int 型整数,返回他们的和
(int x, int y) -> x+y- 接收一个String对象,并在控制台打印,不返回任何值
(string s) -> System.out.print(s)
对上面操作符的例子
public class test {
public static void main( String[] args) {
// TODO Auto-generated method stub
//对list循环遍历操作
String[] atp = {"Rafael Nadal" , "Novak Djokovic" ,
"Stanislas Wawrinka" ,
"David Ferrer" ,"Roger Federer" ,
"Andy Murray" ,"Tomas Berdych" ,
"Juan Martin Del Potro" };
List< String> palyers = Arrays . asList( atp);
//String player = null;
// for (String player : palyer) {
// System.out.println(player + ";");
// }
//使用lambda表达式以及函数操作
//palyers.forEach((player) -> System.out.println(player + ";"));
//在java8中使用双冒号操作符
//palyers.forEach(System.out:: println);
/**----------------------------- */
//对匿名类操作
//1.1使用匿名内部类
// new Thread(new Runnable() {
//
// @Override
// public void run() {
// System.out.println("Hello world!");
// }
// }).start();
//1.2使用lambda
//new Thread(() -> System.out.println("Hello world")).start();
//2.1使用匿名内部类
Runnable racel = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System. out .println ("hello world" );
}
};
Runnable rece2 = () -> System. out .println ("hello world");
racel .run ();
rece2 .run ();
/**-------------------------------- */
//1.1使用匿名内部类根据name排序player
Arrays. sort (atp , new Comparator< String>() {
@Override
public int compare( String o1 , String o2 ) {
// TODO Auto-generated method stub
return o1. compareTo( o2);
}
});
//使用lambda 排序
Arrays. sort (atp , (String o1 , String o2) -> ( o1. compareTo( o2)));
}
}
使用lambdas和Streams
( Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同样,Stream使用懒运算,他们并不会真正地读取所有数据,)Consumer 接口(还不知道是什么东西),重点参考这个:
Java8揭秘(二)Java 8中的 Lambda表达式
函数接口如刚才讲的,Lambda表达式在运行期表示为一个函数接口(functionalinterface)(或者说一个SAM类型),函数接口是一种只定义了一个抽象方法的接口。尽管JDK已经有一些接口都符合函数接口定义,比如Runnable 和 Comparator,但是这对API演进来说是显然不够的。我们又不能到处在代码里使用像Runnable这样的接口,因为这么做不合乎逻辑。
JDK8中新增了一个包,java.util.function,这个包里有一些专门给新增的API使用的函数接口。此处就不列出所有的函数接口了,有兴趣可以自行学习下java.util.function:)
下面列出几个java.util.function中定义的接口,都非常有趣:
- Consumer – 在T上执行一个操作,无返回结果
- Supplier –无输入参数,返回T的实例
- Predicate –输入参数为T的实例,返回boolean值
- Function