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

时间:2022-08-27 10:20:14



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("啦啦啦,这里来写自己的算法。。。"));
}
}

lambda高级进阶--表达式参数的更多相关文章

  1. lambda高级进阶--延迟执行

    前面的整理我们也已经说到了,使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点.在使用lambda表达式的时候务必记住一点就是说lambda表达式都是延迟执行的. 延迟执行代码的原 ...

  2. lambda高级进阶--组合函数

    只有一个参数的函数可以将一个值转换成另一个值,如果你有2个这样的转换函数,那么在进行一个转换之后在进行第二个转换,其实也是一个中转换. 说到这里,先说一下我个人的一个习惯,我在写javaBean的se ...

  3. lambda高级进阶--返回函数

    在函数式编程语言中,函数是一级公民.如同你可以将数字传递给方法,也可以让方法产生数字一样,函数不仅可以作为参数,也可以作为返回值.这听起来好像有点抽象,在JAVA编码中,我们好像也很少这样子写到,但是 ...

  4. 泛型2&lpar;lambda表达式&sol;参数绑定&rpar;

    lambda 表达式: Lambda表达式完整的声明格式如下: [capture list] (params list) mutable exception-> return type { fu ...

  5. &period;Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?

    本文将通过场景例子演示,来通俗易懂的讲解在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码. 通过一系列优化最终达到两个效果,1.通过代码块来控制事务(分布式事务),2.通过委托优化Tran ...

  6. C&num; 表达式树 创建、生成、使用、lambda转成表达式树~表达式树的知识详解

    笔者最近学了表达式树这一部分内容,为了加深理解,写文章巩固知识,如有错误,请评论指出~ 表达式树的概念 表达式树的创建有 Lambda法 和 组装法. 学习表达式树需要 委托.Lambda.Func& ...

  7. Python 高级进阶知识(一)

    参考 Python学习手册 第四版 1 from vs import import 模块 : 导入的一整个模块(python中模块对应一个py文件) 因为import使用一个变量名引用整个模块对象,所 ...

  8. C&num;可扩展编程之MEF学习笔记&lpar;五&rpar;:MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  9. 高级进阶DB2&lpar;第2版&rpar;——内部结构、高级管理与问题诊断

    <高级进阶DB2(第2版)——内部结构.高级管理与问题诊断> 基本信息 作者: 牛新庄    出版社:清华大学出版社 ISBN:9787302323839 上架时间:2013-7-3 出版 ...

随机推荐

  1. VMware中装Win2012并配置Hyper-v

    VMware中装配Win2012再配置Hyper-v,解决虚拟机监控程序已经在运行中的方法 找到虚拟机存放的位置,用记事本打开Windows Server 2012.vmx,在最后添加两行并保存: h ...

  2. window下gvim中文界面改变成英文界面

    中文环境下设置GVIM的界面.菜单.提示为英文语言 修改你的_vimrc,通常为类似C:\Program Files\Vim 加入以下语句至末尾 " set the menu & t ...

  3. 玩转Android之加速度传感器的使用,模仿微信摇一摇

    Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...

  4. 使用SQLiteHelper创建数据库并插入数据

    参考<疯狂android讲义>8.4节P424 1.获取SQLiteDatabase实例有2种方法,一是直接new SQLiteDatabase(),另一种使用SQLiteHelper.一 ...

  5. SlopOne推荐算法

    在开源框架taste中有SlopOne的Java实现,效果不错.使用movielens的数据,代码例如以下 代码 #coding:utf-8 import re import math #读取数据,并 ...

  6. Byte&lbrack;&rsqb;和BASE64之间的转换

    一. BASE64编码 把byte[]中的元素当做无符号八位整数转换成只含有64个基本字符的字符串,这些基本字符是: l 大写的A-Z l 小写的a-z l 数字0-9 l '+' 和 '/' l 空 ...

  7. R语言学习笔记︱Echarts与R的可视化包——地区地图

    笔者寄语:感谢CDA DSC训练营周末上完课,常老师.曾柯老师加了小课,讲了echart与R结合的函数包recharts的一些基本用法.通过对比谢益辉老师GitHub的说明文档,曾柯老师极大地简化了一 ...

  8. django&lpar;2&period;1&rpar; url

    函数path() 1参数route:是一个匹配url的准则,这些准则不会匹配get或者post参数或者域名. 2参数view:当django找到了一个匹配准则,就会调用这个特定的视图函数,并传入一个h ...

  9. Chromium Settings页面修改

    /********************************************************************** * Chromium Settings页面修改 * 说明 ...

  10. 8&period; American Friendship 美国式的友谊

    8. American Friendship 美国式的友谊 (1) Americans usually consider themselves a friendly people.Their frie ...