package lambda表达式;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
/**
* Lambda的常用六种写法
* () -> System.out.println("Hello World"); //没有参数
* event -> System.out.println("点击了按钮"); //有一个参数
* (e1,e2) -> System.out.println(e1+e2); //有多个参数
* (Long e1,Long e2) -> System.out.println(e1+e2); //有多个参数,并指定类型
* () -> {System.out.println("点击了按钮");
* System.out.println("移动了鼠标"); } //有多段代码
* add = (x,y) -> x+y; //两数相加的add函数
*
* @author
*
*/
public class LambdaTest {
/**
* l集合遍历
*/
@Test
public void iteratorTest() {
List<Integer> list=Arrays.asList(1,2,3,4,5);
//原来的方式
for(Integer x:list) {
System.out.println(x*x);
}
System.out.println("*************************");
//lambda的方式
list.forEach(x->System.out.println(x*x));
System.out.println("*************************");
/*
* 直接输出集合元素
* 语法:
* 类名::方法名
*/
list.forEach(System.out::println);
}
/**
* 替代匿名内部类
*/
@Test
public void AnonInnerClassTest() {
new Thread(()->System.out.println("lambda表达式代替匿名内部类")).start();
}
/**
* 实现map/reduce及filter等操作
*
* stream()可以简单地理解成一个iterator,只不过iterator是逐个遍历执行逻辑
* 而stream()是你告诉它要做啥即可,这个是告诉stream()要将里面的元素求平方
*
*/
@Test
public void MapReduceFilterTest() {
List<Integer> list=Arrays.asList(1,2,3,4,5);
/*
* 先过滤出3,4,5 平方后得9,16,25 相加得50
*/
Integer result = list.stream().filter(x->x>2).map(x->x*x).reduce((a,b)->a+b).get();
System.out.println(result);
}
}