第一次看到用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. jQuery ajax如何传多个值到后台页面,举例:

    一.js代码 <script type="text/JavaScript">$("#save_change_<{$aff.Id}>"). ...

  2. 机器学习入门16 - 多类别神经网络 (Multi-Class Neural Networks)

    原文链接:https://developers.google.com/machine-learning/crash-course/multi-class-neural-networks/ 多类别分类, ...

  3. mongo 根据对象中的某个条件来查询

    假如A表有如下数据 { "id" : 1, "users_info" : [{"uid" : 10001}, {"uid" ...

  4. Python—day10 函数的参数分类

    一.实参与形参 1.形参:定义函数,在括号内声明的变量名,用来接受外界传来的值 def fn(形参们):                pass def fn(a,b,c):# 形参就是考虑实参的值, ...

  5. Python 工厂函数和内建函数

    工厂函数 工厂函数都是类对象, 即当你调用他们时, 创建的其实是一个类实例 例如: str(), list(), tuple()... 内建函数 内建函数通常是python自定义的一些函数, 这些函数 ...

  6. metasploit无法连接postgresql

    注:倒数两条可以不做. 问题地址:https://askubuntu.com/questions/50621/cannot-connect-to-postgresql-on-port-5432 设置好 ...

  7. solr索引报错(java.lang.OutOfMemoryError:GC overhead limit exceeded)

    配置文件修改如下: <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3 ...

  8. 使用ML.NET预测纽约出租车费

    有了上一篇<.NET Core玩转机器学习>打基础,这一次我们以纽约出租车费的预测做为新的场景案例,来体验一下回归模型. 场景概述 我们的目标是预测纽约的出租车费,乍一看似乎仅仅取决于行程 ...

  9. 四则运算4(Android版)

    队员:王楗  http://home.cnblogs.com/u/wangjianly/ 结组照:

  10. 从锅炉工到AI专家(3)

    剖析第一个例子 学习<机器学习>,很多IT高手是直接去翻看TensorFlow文档,但碰壁的很多.究其原因,TensorFlow的文档跨度太大了,它首先假设你已经对"机器学习&q ...