前言

java8增加了双冒号运算符、lambda本质上都是语法糖,学习过C#委托、匿名委托再理解java8中的双冒号运算符就容易多了。双冒号就是把方法当作参数传递给需要的方法,或者说是传递到stream()中去。换句话说java8双冒号运算符就是方法引用。方法引用又包括实例方法、静态方法。语法格式类名::方法名。

Java8 VS C#委托

1、Consumer  包含一个accept(T t) 该方法接收一个参数,执行一个没有返回值的操作。在C#里相当action委托,有参数,但没有返回值,action可以有多个参数。

2、Predicate  接收一个参数,返回boolean值,和C# Predicate一样,都是接收一个参数,返回boolean值。

3、Function  T为参数,R为返回值。 包含方法 R apply(T t)接收一个参数,返回值为R,如果需要调用多个操作则使用andThen()。在C# 等价于Func委托。

Show Demo

通过java8实战中交易员和交易记录的列子来理解下。计算出来自剑桥的交易员并且按照其姓名排序。

下面的例子Comparator.comparing需要一个Function委托,分解出来就是  Function byName=(trader)->trader.getName();

List trans=transactions

.stream()

.map(Transaction::getTrader)

.filter(t->t.getCity().equals("Cambridge"))

.distinct()

.sorted(Comparator.comparing(Trader::getName))

.collect(toList());

//3.1

Function byName=(trader)->trader.getName();

trans=transactions

.stream()

.map(Transaction::getTrader)

.filter(t->t.getCity().equals("Cambridge"))

.distinct()

.sorted(Comparator.comparing(byName))

.collect(toList());

for(Trader tr:trans){

System.out.println(tr.getName());

}

冒号运算 java_java 8 双冒号运算符相关推荐

  1. 对makefile中:单冒号普通规则和::双冒号规则的理解 -转

    原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c. ...

  2. c++中的点号(.),冒号(:)和双冒号(::)运算符

    1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{unsigned char a:4; //char型的字符a占4位unsigned ...

  3. python中双冒号_c++中冒号(:)和双冒号(::)的用法和c/c++ 位域结构体

    1.冒号(:)用法 (1)表示结构体内 位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; }XX ...

  4. c++中冒号(:)和双冒号(::)的用法

    转载于:http://fengqing888.blog.163.com/blog/static/3301141620100623933512/ 1.冒号(:)用法 (1)表示机构内位域的定义(即该变量 ...

  5. c\c++中单冒号(:)和双冒号(::)的用法

    一.单冒号(:)     有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便, ...

  6. php中的冒号应用,php中双冒号的应用

    php类代码中常看到"::"的操作符,这个是作用域限定操作符,是用一个双冒号"::"表示,它用来置顶类中不同作用域的级别.左边是作用域右边是访问作用域的成员. ...

  7. mysql 双冒号,SQL中的双冒号(::)符号

    Have picked up someone's code and this is a part of a where clause, anyone know what the double colo ...

  8. ES6 浅谈箭头函数,双冒号符号

    1.箭头函数 ES6 允许使用"箭头"(=>)定义函数. var cat= function (name) { return "tom";};    va ...

  9. java中的双冒号操作符

    java :: Java中的双冒号操作符 </h1><div class="clear"></div><div class="p ...

最新文章

  1. Facebook 正在研究新型 AI 系统,以自我视角与世界进行交互
  2. 【转载】mysql主键的缺少导致备库hang
  3. 7秒钟的记忆?Facebook提出DL新算法,东南大学90后博士新作
  4. SQL 语句中 left join 后用 on 还是 where,区别大了!
  5. Java的知识点10——static关键字、静态初始化块、 参数传值机制、包、导入类import、 静态导入
  6. 如何在Dart中读取控制台输入/ stdin?
  7. ssh免密登录方法不生效?Authentication refused: bad ownership or modes for directory
  8. 七值逻辑与基本数据类型
  9. Effective Java(1)-创建和销毁对象
  10. python opencv 实现从一个文件夹中读取图片做切割处理后放入另一个文件夹
  11. JS实现图片翻书效果
  12. html5局部放大图片,图片局部放大效果原理详解
  13. proteus仿真运行时出现的错误
  14. 正交设计 python算法_正交设计 - SegmentFault 思否
  15. Vscode关闭自动更新
  16. socks5代理IP的几种测试工具
  17. c0语言语法,《Groovy语言规范》-语法
  18. linux中的lnk格式,ink文件扩展名,ink文件怎么打开?
  19. 微信公众号支付对接流程
  20. MVP进阶及OKHttp上传图片

热门文章

  1. MySQL创建数据表(CREATE TABLE语句)
  2. 【PAT乙级】1081 检查密码 (15 分)
  3. 再话单元测试unittest
  4. MySQL中的用户管理
  5. lambda表达式的日期问题
  6. DOS命令查看网络信息
  7. 【堆】堆的基本操作总结
  8. mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比,于是写了个插件。
  9. 关于分布式锁的面试题都在这里了
  10. Linux 需要的常用操作,你只差这篇文章