lambda高级进阶--表达式参数


1,现在我们封装一个方法,来提供一个比较器,显然比较器是拥有两个参数的--用来比较的两个值。
public class Linkin
{
	public static String[] sort(String[] array)
	{
		Arrays.sort(array, (s, t) -> Integer.compare(s.length(), t.length()));
		return array;
	}


	public static void main(String[] args)
	{
		String[] array = { "111111", "11", "111" };
		Arrays.stream(sort(array)).forEach(System.out::println);
	}
}


2,现在我们再封装一个方法,重复一个迭代来计算输出迭代次数。
public class Linkin
{
	public static void repeat(int n, IntConsumer action)
	{
		for (int i = 0; i < n; i++)
		{
			action.accept(i);
		}
	}


	public static void main(String[] args)
	{
		repeat(5, System.out::println);
	}
}


3,上面的2个情景我们使用lambda表达式都为其传入了参数,一般来说,我们在设计算法时,会希望它可以将全部所需的信息都作为参数传递进来。举个例子,当我们在编辑一个图片的时候,很可能需要用户提供一个计算相熟颜色的函数,这种函数可能不仅需要知道当前的颜色,还要知道像素在图片中的位置,或者相邻的像素是什么。但是,如果这些参数很少用到,那么我们就可以考虑提供第2个版本,不强制用户接受那些不需要的参数。


比如上面的第2个情节中,我们现在暂时不管迭代了次数了,不用来做计算了,那么我们现在就可以不需要传入这些参数用来做处理,我们直接换一个函数式接口就OK了。代码如下:
public class Linkin
{
	public static void repeat(int n, Runnable action)
	{
		for (int i = 0; i < n; i++)
		{
			action.run();
		}
	}


	public static void main(String[] args)
	{
		repeat(5, ()->System.out.println("啦啦啦,这里来写自己的算法。。。"));
	}
}

转载于:https://www.cnblogs.com/LinkinPark/p/5232954.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值