`

lambda表达式和函数式方程

    博客分类:
  • java
 
阅读更多

惊叹于λ表达式的简洁和优美,在这里也分享一下使用心得.

 

目标程序:使一个容器内的String类型的数据

1.长度不能超过5  

2.全部变成大写

注意:这份代码导入了外部扩展的jar包,是google的guava包,需要百度下载.

一般的程序代码:

package s0222函数式编程;
import java.util.Collection;
import java.util.List;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;

public class Main {
	public static void  main(String [] args){

        //创建容器,存放String类型数据
         List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd");
		 
        //函数f1,控制容器内元素长度小于等于5,用了匿名内部类
        Function<String,String> f1=new Function<String,String>()
        {
			public String apply(String input) 
			{return input.length()>5?input.substring(0, 5):input;}
        };
        //函数f2,将元素转换成大写,用了匿名内部类
        Function<String,String> f2=new Function<String,String>()
        {
			public String apply(String input) 
		    {return input.toUpperCase();}
        };
            
        //组合函数f1,和函数f2
        Function<String,String> f=Functions.compose(f1, f2);
        //函数式编程
		Collection<String> list3= Collections2.transform(list2, f);
		//增强for循环,输出容器内每个元素
		for(String temp:list3)
			System.out.println(temp);

}}

 

运用了λ表达式的代码:

package s0222函数式编程;
import java.util.Collection;
import java.util.List;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;

public class Main {
	public static void  main(String [] args){
        //创建容器,存放String类型的数据
         List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd");	 
        //lambda表达式,函数f1,控制容器内元素长度小于等于5
        Function<String,String> f1=(input)->input.length()>5?input.substring(0, 5):input;
        //lambda表达式,函数f1,将元素转换成大写
        Function<String,String> f2=(input)->input.toUpperCase();                      
        //组合函数f1,和函数f2
        Function<String,String> f=Functions.compose(f1, f2);
        //函数式编程
		Collection<String> list3= Collections2.transform(list2, f);
		//输出每个元素
		list3.forEach(name->System.out.println(name) );
	}

}

 

 

我们将核心代码部分抽取出来,去掉注释,对比会更明显.

1.普通代码

        List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd");    
        Function<String,String> f1=new Function<String,String>()
        {
			public String apply(String input) 
			{return input.length()>5?input.substring(0, 5):input;}
        };
        
        Function<String,String> f2=new Function<String,String>()
        {
			public String apply(String input) 
		    {return input.toUpperCase();}
        };
     
        Function<String,String> f=Functions.compose(f1, f2);
		Collection<String> list3= Collections2.transform(list2, f);
		for(String temp:list3)  System.out.println(temp);

 2.运用λ表达式

        List<String > list2=Lists.newArrayList("babkjsdhf","kik","dfdfdkd");	 
        Function<String,String> f1=(input)->input.length()>5?input.substring(0, 5):input;
        Function<String,String> f2=(input)->input.toUpperCase();                      
        Function<String,String> f=Functions.compose(f1, f2);
		Collection<String> list3= Collections2.transform(list2, f);
		list3.forEach(name->System.out.println(name) );

 

可以看到,运用λ表达式可以极大的简化代码,增强可读性!!

λ表达式可以简化1.只有一个方法的匿名内部类

                           2.遍历数组

 

 

另外,监听器对象也能运用lambda表达式

 button.addActionListener((e) -> System.out.println("Hello") );    
   

3.lambda表达式的形式
    (参数) ->{表达式}     参数可以为空
示例: 3.1test.addActionListener( e->{System.out.println();} );
         3.2 new Thread(   lambda表达式  ).start(); 扩展开就是如下形式
               new Thread(
                 ()->{  System.out.println("1");System.out.println("2");System.out.println("3");}  
                          ).start();
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics