Java 8 的Lambda表达式
第一次看到用lambda表达式写出来的Java代码时,我对这种神秘的语法感到非常不理解,认为这样的Java搞得不可读。没有专门的去学习和认识,今天花了几个小时写了示例的练习后,我开心的看到了更清晰的Java代码。这有点像学习泛型,第一次见的时候我很讨厌它。所以现在的想法就是,不要畏惧lambda表达式以及方法引用的神秘语法,做几次示例Demo,从集合类中提取、过滤数据之后,你就会发现很多东西不是表面看起来那样,实际操作起来发现确实有进步。
传递匿名内部类类
public class CreateThread {
public static void main(String[] args) {
// JDK 8之前创建线程
new Thread(
new Runnable() {
@Override
public void run() {
System.out.println("this is a thread!" + Thread.currentThread().getName());
}
})
.start();
// JDK 8创建线程
new Thread(()->System.out.println("this is a thread of lambda " + Thread.currentThread().getName())).start();
}
}
遍历集合
public static void main(String[] args) {
List<String> list = Arrays.asList("one","two","three","four","five","six","seven");
System.out.println("\n------JDK8之前的遍历方式----------");
for(String data:list){
System.out.print(data+"\t");
}
System.out.println("\n\n\n------JDK8之后的遍历方式----------");
list.forEach(data -> System.out.print(data + "\t"));
}
接口式编程
public static void main(String[] args) {
List<String> list = Arrays.asList("one", "two", "three", "four", "five", "six", "seven");
System.out.println("以f开头的数据信息:");
filter(list, (str) -> str.toString().startsWith("f"));
System.out.println("以e结尾的数据信息:");
filter(list, (str) -> str.toString().endsWith("e"));
System.out.println("输出全部数据:");
filter(list, (str) ->true);
System.out.println("输出长度大于等于4的数据:");
filter(list, (str) -> str.toString().length() >= 4);
}
public static void filter(List<String> names, Predicate condition) {
for (String name : names) {
if (condition.test(name)) {
System.out.print(name + "\t ");
}
}
System.out.println();
}
遍历集合并处理数据
public static void main(String[] args) {
System.out.println("不使用lambda表达式为每个订单加上12%的税");
List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
double price = cost + .12 * cost;
System.out.print(price + "\t");
}
System.out.println();
System.out.println("使用lambda表达式为每个订单加上12%的税");
costBeforeTax
.stream()
.map(cost -> cost + cost * .12)
.collect(Collectors.toList())
.forEach(data -> System.out.print(data + "\t"));
}
过滤数据
public static void main(String[] args) {
List<String> list = Arrays.asList("1", "2", "3", "2", "1", "4", "2");
List<String> collect = list.stream().distinct().collect(Collectors.toList());
System.out.println("源数据");
list.forEach(data -> System.out.print(data + "\t"));
System.out.println("\n\n过滤后的数据源");
collect.forEach(data -> System.out.print(data + "\t"));
}
统计数据信息
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>(16);
for (int i = 0; i < 5; i++) {
arrayList.add(String.valueOf(Math.random()));
}
arrayList.forEach(data -> System.out.print(data + "\t"));
System.out.println();
DoubleSummaryStatistics statistics =
arrayList.stream().mapToDouble((x) -> Double.parseDouble(x)).summaryStatistics();
System.out.println("Max = " + statistics.getMax());
System.out.println("Min = " + statistics.getMin());
System.out.println("Average = " + statistics.getAverage());
System.out.println("Sum = " + statistics.getSum());
}
Java 8 的Lambda表达式的更多相关文章
- java 8 中lambda表达式学习
转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...
- Lambda 表达式,Java中应用Lambda 表达式
一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...
- Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】
原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...
- Java 8中Lambda表达式默认方法的模板方法模式,你够了解么?
为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行.在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容. 模板 ...
- 在Android中使用Java 8的lambda表达式
作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...
- 【转】Java 8十个lambda表达式案例
1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...
- Java 8十个lambda表达式案例
1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...
- Java 8 特性 —— lambda 表达式
Lambda 表达式 Lambda表达式本质上是一个匿名方法.常见的一个例子是,在 IDEA + JDK8 的环境下按照Java传统的语法规则编写一个线程: new Thread(new Runnab ...
- Java中的Lambda表达式
Lambda来源于希腊字母入,发音为 /'læmdə/对高数有所了解的人都知道λ用于声明一个数学逻辑系统,表示根据XX的输入参数,会返回某个Y结果.这正是编程语言中函数(方法)的意思.因此Lambd ...
随机推荐
- ubuntu系统界面改变
主题:https://gitzab.com/Anduin/GNOME-OSX-II-Theme.git图标:https://github.com/keeferrourke/la-capitaine-i ...
- module.exports与exports,export与export default之间的关系和区别
首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个 ...
- [Swift]LeetCode223. 矩形面积 | Rectangle Area
Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined b ...
- [Swift]LeetCode881. 救生艇 | Boats to Save People
The i-th person has weight people[i], and each boat can carry a maximum weight of limit. Each boat c ...
- JSONP和CORS两种跨域方式的优缺点及使用方法原理介绍
随着软件开发分工趋于精细,前后端开发分离成为趋势,前端同事负责前端页面的展示及页面逻辑处理,服务端同事负责业务逻辑处理同时通过API为前端提供数据也为前端提供数据的持久化能力,考虑到前后端同事开发工具 ...
- 使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)
本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文 ...
- [Abp 源码分析]十七、ASP.NET Core 集成
0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...
- 【Spark篇】---Spark中transformations算子二
一.前述 今天继续整理几个Transformation算子如下: mapPartitionWithIndex repartition coalesce groupByKey zip zipWithIn ...
- C#版 - Leetcode 65. 有效数字 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
- springboot+mybatis+dubbo+aop日志终结篇
之前的几篇文章把dubbo服务层都介绍完毕,本篇文章咱们主要写web层如何调用服务层的方法.文章底部附带源码. 启动服务 服务启动时,会向zk注册自己提供的服务,zk则会记录服务提供者的IP地址以及暴 ...