在函数式编程语言中,函数是一级公民。如同你可以将数字传递给方法,也可以让方法产生数字一样,函数不仅可以作为参数,也可以作为返回值。这听起来好像有点抽象,在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);
}
}

最新文章

  1. Xshell4注册码,Xftp注册码
  2. 取得DIV的ID还是CLASS
  3. 理解SQL Server中的权限体系(上)----主体
  4. ROWNUM-Oracle中的分页代码
  5. Lintcode--005(最长公共子序列)
  6. hadoop技术基本架构
  7. 将nodejs代码部署到阿里云服务器
  8. Oracle删除控制文件恢复
  9. Windows Live Writer介绍及相关问题解决
  10. 结合别人的文章,做RocketMQ的一点原理分析,结合源码(尽量)----未完待续
  11. SSAS 后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。
  12. Android Runtime Stats
  13. 《剑指offer》-前n项和不准用通解和各种判断
  14. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?
  15. 两个关于URL解析的例子
  16. iOS:制作一个简易的计算器
  17. TCP系列41—拥塞控制—4、Linux中的慢启动和拥塞避免(一)
  18. 手机锁屏js倒计时停止问题解决办法探索
  19. 使用pinyin4j实现汉字转拼音
  20. Druid对数据库密码加密的坑

热门文章

  1. JAVA中的按值传递
  2. C语到C++注释转换小项目
  3. 【读书笔记】【深入理解ES6】#11-Promise与异步编程
  4. 详说 Navicat for MySQL 快捷键
  5. Spring--AOP(面向切面)编程
  6. element-ui,router.push到其他路由,菜单栏不会高亮对应的路由
  7. Java学习笔记【持续更新】
  8. POJ 3278 Catch That Cow(BFS,板子题)
  9. HDU 1847 Good Luck in CET-4 Everybody!(规律,博弈)
  10. Java 大数类BigInteger和BigDecimal的基本函数