zoukankan      html  css  js  c++  java
  • 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);
    	}
    }


  • 相关阅读:
    浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现(一)
    可变与不可变类型(一)
    查看虚拟机版本
    无法应用原保存的显示器配置
    uname -a输出内容分析
    Python 模块
    Python 函数(三)
    Python 函数(二)
    Python 函数(一)
    5-26 单词长度
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232953.html
Copyright © 2011-2022 走看看