第一次看到用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表达式的更多相关文章

  1. java 8 中lambda表达式学习

    转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...

  2. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  3. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  4. Java 8中Lambda表达式默认方法的模板方法模式,你够了解么?

    为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行.在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容. 模板 ...

  5. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  6. 【转】Java 8十个lambda表达式案例

    1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...

  7. Java 8十个lambda表达式案例

    1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...

  8. Java 8 特性 —— lambda 表达式

    Lambda 表达式 Lambda表达式本质上是一个匿名方法.常见的一个例子是,在 IDEA + JDK8 的环境下按照Java传统的语法规则编写一个线程: new Thread(new Runnab ...

  9. Java中的Lambda表达式

    Lambda来源于希腊字母入,发音为  /'læmdə/对高数有所了解的人都知道λ用于声明一个数学逻辑系统,表示根据XX的输入参数,会返回某个Y结果.这正是编程语言中函数(方法)的意思.因此Lambd ...

随机推荐

  1. ubuntu系统界面改变

    主题:https://gitzab.com/Anduin/GNOME-OSX-II-Theme.git图标:https://github.com/keeferrourke/la-capitaine-i ...

  2. module.exports与exports,export与export default之间的关系和区别

    首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个 ...

  3. [Swift]LeetCode223. 矩形面积 | Rectangle Area

    Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined b ...

  4. [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 ...

  5. JSONP和CORS两种跨域方式的优缺点及使用方法原理介绍

    随着软件开发分工趋于精细,前后端开发分离成为趋势,前端同事负责前端页面的展示及页面逻辑处理,服务端同事负责业务逻辑处理同时通过API为前端提供数据也为前端提供数据的持久化能力,考虑到前后端同事开发工具 ...

  6. 使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)

    本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文 ...

  7. [Abp 源码分析]十七、ASP.NET Core 集成

    0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...

  8. 【Spark篇】---Spark中transformations算子二

    一.前述 今天继续整理几个Transformation算子如下: mapPartitionWithIndex repartition coalesce groupByKey zip zipWithIn ...

  9. C#版 - Leetcode 65. 有效数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  10. springboot+mybatis+dubbo+aop日志终结篇

    之前的几篇文章把dubbo服务层都介绍完毕,本篇文章咱们主要写web层如何调用服务层的方法.文章底部附带源码. 启动服务 服务启动时,会向zk注册自己提供的服务,zk则会记录服务提供者的IP地址以及暴 ...