lambda表达式示例讲解
来源:互联网 发布:linux 查看系统log 编辑:程序博客网 时间:2024/04/29 04:50
最近由于使用elasticsearch版本更新到5.0了,看到5.0版本源码中使用了很多的lambda表达式,于是就上网找资料简单研究一下,以下就通过代码示例来说明其用法,这也是最通俗易懂的表达方式了(个人对lambda表达式并不是很看好,确实能简化代码,但是后期不易于维护,调试起来也不方便):
它的基本语法为:参数 -> 表达式 或者 参数 -> 语句
1.使用lambda表达式对列表进行处理:
public class LambdaListTest {public static void main(String[] args) {List<String> lambdaList = new ArrayList<String>();lambdaList.add("lbj");lambdaList.add("wade");lambdaList.add("paul");//未使用lambda表达式的循环方式for(String name : lambdaList){System.out.println(name);}//使用lambda表达式的循环方式lambdaList.forEach((name) -> System.out.println(name));}}
2.匿名内部类的lambda表达式使用:
public class LambdaAnonyTest {public static void main(String[] args) {//未使用lambda表达式的匿名内部类使用Runnable run1 = new Runnable() {@Overridepublic void run() {System.out.println("未使用lambda表达式");}};//使用lambda表达式的匿名内部类使用Runnable run2 = () -> System.out.println("使用lambda表达式");run1.run();run2.run();}}
3.使用lambda表达式排序:
public class LambdaSortTest {public static void main(String[] args) {String[] sportsArr = {"basketball","swimming","running"};//未使用lambda表达式排序Arrays.sort(sportsArr, new Comparator<String>() {@Overridepublic int compare(String arg0, String arg1) {return arg0.compareTo(arg1);}});//使用lambda表达式排序Arrays.sort(sportsArr, ((String s1,String s2) -> (s1.compareTo(s2))));}}
4.使用lambda表达式的predicate过滤列表信息:
public class LambdaPredicateTest {public static void main(String[] args) {//使用lambda表达式的predicate过滤列表中符合条件的信息//可以使用and过滤多个信息,也可以使用orList<Integer> prediList = new ArrayList<Integer>();prediList.add(21);prediList.add(1);prediList.add(22);Predicate<Integer> stat1 = (num) -> num > 20;Predicate<Integer> stat2 = (num) -> num < 30;prediList.stream().filter(stat1.and(stat2)).forEach((num) -> System.out.println(num));}}
5.使用lambda的map方法进行数据计算:
public class LambdaMapTest {public static void main(String[] args) {List<Integer> salaryList = new ArrayList<Integer>();salaryList.add(1000);salaryList.add(1500);salaryList.add(1200);//未使用lambda表达式的map方法进行数据计算for(int salary : salaryList){double newSalary = salary + 0.2 * salary;System.out.println(newSalary);}//使用lambda表达式的map方法进行数据计算salaryList.stream().map((salary) -> salary + 0.2 * salary).forEach(System.out::println);}}
6.使用lambda的collect方法返回列表或者其他想要的信息:
public class LambdaCollectTest {public static void main(String[] args) {List<String> langList = new ArrayList<String>();langList.add("java");langList.add("php");langList.add("c");//利用lambda表达创建一个String列表List<String> filterList = langList.stream().filter(lang -> lang.length() > 3).collect(Collectors.toList());System.out.println(filterList);//利用lambda表达式处理列表中的信息之后并且拼接String upperStr = langList.stream().map(lang -> lang.toUpperCase()).collect(Collectors.joining("-"));System.out.println(upperStr);}}
7.使用lambda计算最大,最小,平均值等等:
public class LambdaStatisticTest {public static void main(String[] args) {//使用lambda表达式计算集合中元素的最大值等等List<Integer> testList = Arrays.asList(2,3,5,11,8,29,99);IntSummaryStatistics stat = testList.stream().mapToInt((num) -> num).summaryStatistics();System.out.println("max:" + stat.getMax());System.out.println("min:" + stat.getMin());System.out.println("sum:" + stat.getSum());System.out.println("average:" + stat.getAverage());}}
总结:
lambda表达式确实使得代码简单清晰了很多,而且看起来也高大上了很多;但是由于lambda表达式是jdk1.8之后才引入的,而使用jdk1.8一起的版本的开发者还大有人在,所以个人感觉还没有完全普及,可读性不是很强,语法也相对比较复杂。
但是,不管如何lambda表达式也是jdk1.8的强大功能之一,作为java开发者,我们理应去研究下他,即使没有用到他。
欢迎大家一起交流技术。。
1 0
- lambda表达式示例讲解
- Lambda 表达式的示例
- Lambda表达式示例
- Lambda 表达式的示例
- java lambda表达式示例
- Java8 lambda表达式示例
- Java8 Lambda表达式示例
- 委托于Lambda表达式示例
- Java 8 lambda表达式示例
- Java 8 lambda表达式示例
- lambda表达式10个示例
- 匿名表达式,lambda表达式,Linq的示例
- 实例讲解C++中lambda表达式
- 正则表达式PPT、示例讲解
- Ruby正则表达式示例讲解
- lambda表达式的一个简单示例
- C++ AMP: Lambda表达式的示例
- Lambda 表达式的示例-来源(MSDN)
- add 命令报错时
- iOS开发抓包工具之Charles使用
- java.io.FileNotFoundException: File does not exist: hdfs ://sxt/home/sqoop-1.4.6/lib/commons-codec-1
- 【学习总结】css中块状元素与内联元素解析
- 必知必会的Android自定义View
- lambda表达式示例讲解
- 232. Implement Queue using Stacks
- Java 使用 ffmpeg.exe ( FLV视频转换器 )
- linux经典书籍推荐
- python 训练caffe_ssd数据
- 干货来袭——LoadRunner实用教程年度大汇总
- 1033. 旧键盘打字(20)
- 对于一个".bmp"图片,获取其像素值的大小和个数
- C——volatile