Java中Lambda表达式的基本用法
Lambda
Lambda表达式作为Java 8中的新特性, 帮助我们开发者简化代码,更好的进行函数式编程,有必要详细了解它的用法。
-
What Why How
What
- Lambda表达式基于数学中的λ演算得名,而它并不是Java独有的,在别的语言中也广泛被使用,Lambda作为函数式编程中的基础部分,直接对应于其中的lambda进行抽象,同时它也是匿名函数,即没有函数名的函数。实质上可以实现某一接口的匿名内部类的中的方法 ,抛弃多余的代码,直接写出最重要的逻辑代码,正因为它是匿名函数,我们也不需要在起名上浪费时间。
- 组成部分: a. 括号包起来的参数 b. 箭头 ( -> 操作符) c. 方法体,可以是单个语句,也可以是语句块
Why
-
提供了更为简单的语法和写作方式 取代匿名内部类 简化代码,干净整洁
How
-
取代匿名内部类
//不使用Lambda public void testRunable() { new Thread(new Runnable() { @Override public void run() { System.out.println("No Lambda Test"); } }).start(); }
//使用Lambda public void testRunable() { new Thread(() -> System.out.println("Lambda Test")).start(); }
-
集合进行迭代 这时就需要了解Java 8同时出的 java.util.stream类,封装了一些集合类,就重要的写几个例子。 forEach
//forEach:迭代集合中所有的对象 public static void LambdaList() { List<String> lists = Arrays.asList("Lambdas", "Default Method", "java", "Android"); // 原方法输出 for (String list : lists) { System.out.println(list); } // 基本lambda输出 lists.forEach(n -> System.out.println(n)); // 进化; 方法引用使用::双冒号操作符表示 lists.forEach(System.out::println); }
map (重点)
//map:将一个对象变换为另外一个 private static void LambdaMapReduce() { List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); // 每一个数加1.2倍-------原来的方法 for(Integer cost :costBeforeTax) { double price=cost+1.2*cost; System.out.println(price); } // 每一个数加1.2倍,然后输出------Lambda表达式 costBeforeTax.stream().map(n -> n + n * 1.2).forEach(System.out::println); // 用map在数列中加逗号 List<String> mapTest = Arrays.asList("qwerert", "asdasdddasd", "test"); String joinTest = mapTest.stream().map(str -> str.toUpperCase()).collect(Collectors.joining(", ")); System.out.println(joinTest); }
reduce
// Reduce:将所有值合并为一个 private static void LambdaMapReduce() { List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); double result=costBeforeTax.stream().map(m ->m*1.2).reduce((sum,m)->sum+m).get(); System.out.println(result); }
filter
//filter:比较过滤 private static void lambdaFilter() { List<Integer> costBeforeTax=Arrays.asList(100,200,300,400,500); costBeforeTax.stream().filter(n->n>=300).forEach(System.out::println); }
总结
关于Java的Lambda表达式还有很多需要学习的地方,这些只不过是简单的一些用法,随着函数式编程的发展,Lambda表达式的作用会越来越大,同时简洁优雅也是它的一大特色,有句话说的好,简洁优雅就是生产力,还能炫技,简直爽到不行。
上一篇:
IDEA上Java项目控制台中文乱码