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 ...
随机推荐
- 快速理解Token,Cookie,Session
在Web应用中,HTTP请求是无状态的.即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session. Cookie Cookie ...
- [Swift]LeetCode557. 反转字符串中的单词 III | Reverse Words in a String III
Given a string, you need to reverse the order of characters in each word within a sentence while sti ...
- mysql 主主+ Keepalived 高可用
这是在mysql互为主从的基础上做的 yum -y install keepalived #两台机器上都装 配置Keepalived主从, vrrp_instance VI_1 { state ...
- Java编程——学习大纲
Java基础 Java基础--JDK的安装和配置 Java基础--Eclipse使用 Java基础--基本概念.数据类型.运算符 Java扩展--整型和浮点型在计算机中的存储格式 Java基础--流程 ...
- JVM基础系列第14讲:JVM参数之GC日志配置
说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...
- Python爬虫入门教程 2-100 妹子图网站爬取
妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...
- Spring Boot2.0 设置拦截器
所有功能完成 配置登录认证 配置拦截器 在spring boot2.0 之后 通过继承这个WebMvcConfigurer类 就可以完成拦截 新建包com.example.interceptor; 创 ...
- C++STL模板库适配器之stack容器
目录 适配器 一丶适配器简介 二丶栈(stack)用法 1.栈的常用方法 适配器 一丶适配器简介 Stl中的适配器,有栈 (stack) 队列 queue 根priority_queue 适配器都是包 ...
- 如何设计一个 RPC 系统
本文由云+社区发表 RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高.但是RPC本身的构成却比较复杂,由于受到编程语言.网络模型 ...
- 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇). 众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模 ...