下面是Java lambda表达式的简单例子:

// 1. 不需要参数,返回值为 5
() -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y // 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)

在Java中,Comparator 类被用来排序集合。 在下面的例子中,我们将根据球员的 name, surname, name 长度 以及最后一个字母。 和前面的示例一样,先使用匿名内部类来排序,然后再使用lambda表达式精简我们的代码。
在第一个例子中,我们将根据name来排序list。 使用旧的方式,代码如下所示:

String[] players = {"Rafael Nadal", "Novak Djokovic",
"Stanislas Wawrinka", "David Ferrer",
"Roger Federer", "Andy Murray",
"Tomas Berdych", "Juan Martin Del Potro",
"Richard Gasquet", "John Isner"}; // 1.1 使用匿名内部类根据 name 排序 players
Arrays.sort(players, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s1.compareTo(s2));
}
});

使用lambdas,可以通过下面的代码实现同样的功能:

// 1.2 使用 lambda expression 排序 players
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2));
Arrays.sort(players, sortByName); // 1.3 也可以采用如下形式:
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));

其他的排序如下所示。 和上面的示例一样,代码分别通过匿名内部类和一些lambda表达式来实现Comparator :

// 1.1 使用匿名内部类根据 surname 排序 players
Arrays.sort(players, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s1.substring(s1.indexOf(" ")).compareTo(s2.substring(s2.indexOf(" "))));
}
}); // 1.2 使用 lambda expression 排序,根据 surname
Comparator<String> sortBySurname = (String s1, String s2) ->
( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) );
Arrays.sort(players, sortBySurname); // 1.3 或者这样,怀疑原作者是不是想错了,括号好多...
Arrays.sort(players, (String s1, String s2) ->
( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) )
); // 2.1 使用匿名内部类根据 name lenght 排序 players
Arrays.sort(players, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s1.length() - s2.length());
}
}); // 2.2 使用 lambda expression 排序,根据 name lenght
Comparator<String> sortByNameLenght = (String s1, String s2) -> (s1.length() - s2.length());
Arrays.sort(players, sortByNameLenght); // 2.3 or this
Arrays.sort(players, (String s1, String s2) -> (s1.length() - s2.length())); // 3.1 使用匿名内部类排序 players, 根据最后一个字母
Arrays.sort(players, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1));
}
}); // 3.2 使用 lambda expression 排序,根据最后一个字母
Comparator<String> sortByLastLetter =
(String s1, String s2) ->
(s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1));
Arrays.sort(players, sortByLastLetter); // 3.3 or this
Arrays.sort(players, (String s1, String s2) -> (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1)));

最新文章

  1. blade快速使用指南
  2. 工作中常用的Linux命令:目录
  3. TinyFrame框架中的UOW使用方式纠正
  4. icp算法基本思想
  5. c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
  6. 【原创】Sliding Window Maximum 解法分析
  7. sqlserver根据id集合,批量插入。(巧用sqlserver内置函数)
  8. 转:ReportViewer控件使用方法
  9. android XML解析之DOM解析方式
  10. 集群部署及测试SolrCloud-5
  11. BZOJ4711 小奇挖矿
  12. 20190402-display展现、float浮动
  13. java.sql.SQLException: Value &#39;0000-00-00&#39; can not be represented as java.sql.Timestamp
  14. H5上传图片之canvas
  15. 小程序 切换到tabBar页面不刷新问题
  16. sonarqube 代码检查
  17. Spring AOP开发
  18. LoadRunner 检查点函数总结
  19. Spring框架总结(四)
  20. java面向对象概念2

热门文章

  1. C#-概念-类库:类库
  2. vs2019里没有linq to sql或EF工具,导致dbml或者edmx无法通过设计器浏览
  3. 什么时候需要用的Vue.nextTick()
  4. 《图解设计模式》读书笔记4-2 STRATEGY模式
  5. delphi 获取文件的最新修改时间 http://www.delphitop.com/html/wenjian/64.html
  6. 设计模式 - 建造者模式 Builder Pattern
  7. 应用安全-工具使用-Burpsuite
  8. Ubuntu下面怎么连接drcom校园网?(重庆大学实测可行)
  9. [BZOJ3622] 已经没有什么好害怕的了(dp+容斥)
  10. 03 synchronized