• lambda高级进阶--返回函数


    在函数式编程语言中,函数是一级公民。如同你可以将数字传递给方法,也可以让方法产生数字一样,函数不仅可以作为参数,也可以作为返回值。这听起来好像有点抽象,在JAVA编码中,我们好像也很少这样子写到,但是还是很有必要理解这种设计,特别是在1.8之后的java中。

    现在来看下面的代码示例:
    public class Linkin
    {
    	// 编写一个静态方法,对str这个字符串做一元操作
    	public static String handleStr(String str, UnaryOperator<String> function)
    	{
    		return function.apply(str);
    	}
    
    
    	// 编写一个方法,该方法返回一个函数式编程,这个模拟它里面封装了一个一元操作
    	public static UnaryOperator<String> function(String str)
    	{
    		System.out.println(str);
    		return String::toLowerCase;
    	}
    
    
    	public static void main(String[] args)
    	{
    		// 1,现在我们来分开处理2次字符串的算法
    		System.out.println(handleStr("测试字符串a", (str) -> str.substring(0, 2)));
    		System.out.println(handleStr("测试字符串B", String::toLowerCase));
    
    
    		// 2,现在我们来统一处理一次字符串的算法
    		System.out.println(handleStr("测试C字符串C", (str) ->
    		{
    			return str.substring(0, 4).toLowerCase();
    		}));
    
    
    		// 3,假设我现在不能明确的知道这个算法,后者是这个算法是别人写的,
    		// 那么就可以这样子来设计,其他人自己是重写function方法就好了
    		System.out.println(handleStr("AAABBB", function("这里表示算法中其他的操作")));
    	}
    
    
    }


    一般来说,不要不敢编写返回函数的方法。这对于自定义函数非常有用。举个例子,Arrays.sort()方法带有一个Comparator参数,因为有很多方法都可以用来比较2个值,所以我们当然也可以按照自己的算法来编写一个返回比较器的方法,这样子就可以将自己写的比较器作为参数传入到Arrays.sort()方法中了。看下面的代码:
    public class Linkin
    {
    	public static void main(String[] args)
    	{
    		String[] array = { "1", "11", "111" };
    		Arrays.sort(array, new MyComparator());
    		Arrays.stream(array).forEach(System.out::println);
    	}
    }
    
    
    class MyComparator implements Comparator<String>
    {
    	@Override
    	public int compare(String o1, String o2)
    	{
    		System.out.println("这里表示其他的操作!");
    		return (o1.length() < o2.length()) ? -1 : ((o1.length() == o2.length()) ? 0 : 1);
    	}
    }


  • 相关阅读:
    说文解字 —— 拆字
    4K 对齐与固态硬盘检测工具
    硬盘分区(主分区、扩展分区、逻辑分区)
    python+caffe训练自己的图片数据流程
    亲和数(220/284)
    浅谈多进程多线程的选择
    Linux下的多线程编程
    LINUX-进程的概念
    Linux终端那件事儿
    Linux的终端类型
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232953.html
Copyright © 2020-2023  润新知