Spark开发必会之:Java8新特性Lambda表达式

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 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 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);
	}
	
}

 

你可能感兴趣的:(Java)