本文转载原文http://www.cnblogs.com/jalja/p/7655170.html

一、使用线程

public static void main(String[] args) {
//=============================原始版==========================
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("简单的线程编程JDK1.8以前");
}
}).start();
//=====================Lambda可读性强一些================================
new Thread(()->{System.out.println("Lambda可读性强一些");}).start();
//=====================Lambda简洁一些================================
new Thread(()->System.out.println("Lambda简洁一些")).start();
}

Runnable接口源码:

@FunctionalInterface
public interface Runnable {
public abstract void run();
}

该接口只有一个抽象方法,且该抽象没有参数 所以Lambda 表达式为 ();   System.out.println("简单的线程编程JDK1.8") 是实现该接口覆盖run方法的具体实现逻辑。所以最终Runnable接口的最终实现代码用Lambda表达式实现为:() -> System.out.println("简单的线程编程JDK1.8")。

二、使用  Collections.sort 排序

public static void testComparatorLambda(){
List<Integer> names = Arrays.asList(1, 10, 3, 2,1);
//=========================创建一个匿名的比较器对象=====================
Collections.sort(names, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2));
return o1.compareTo(o2);
}
});
//==========================使用Lambda=================================
Collections.sort(names,(Integer o1,Integer o2)->{
System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2));
return o1.compareTo(o2);
} );
System.err.println(names);
}
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}

Compoarator接口的compare方法有两个参数 所以Lambda 表达式为 (Integer o1,Integer o2);   {System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2));return o1.compareTo(o2);} 是实现该接口覆盖compare方法的具体实现逻辑。所以最终Compoarator接口的最终实现代码用Lambda表达式实现为:(Integer o1,Integer o2)->{ System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2)); return o1.compareTo(o2);}

三、自己模拟业务使用Lambda表达式实现

业务:从一堆苹果中选出红色的苹果。

建立一个苹果类

class Apple{
private String color;
private Integer weight;
构造函数
get,set
}

一个策略接口

interface AppleFilter{
boolean validate(Apple apple);
}

业务实现:

public class LambdaAgo {
public static void main(String[] args) {
List<Apple> apples=Arrays.asList(new Apple("red",120),new Apple("green",189),new Apple("red",110));
//===方法一 使用内部类======
getAppleFilter(apples,new AppleFilter() {
@Override
public boolean validate(Apple apple) {
return apple.getColor().equals("red");
}
});
//===方法二 使用 Lambda======
getAppleFilter(apples,(Apple apple)-> apple.getColor().equals("red")); }
public static List<Apple> getAppleFilter(List<Apple> apples,AppleFilter filter){
List<Apple> apples2=new ArrayList<Apple>();
for(Apple a:apples){
if(filter.validate(a)){
apples2.add(a);
}
}
System.out.println("getAppleFilter:"+apples2);
return apples2;
}
}

[JDK8] Lambda的更多相关文章

  1. jdk8 Lambda表达式与匿名内部类比较

    Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...

  2. JDK8 Lambda表达式对代码的简化

    只是举个例子: public class LambdaDemo { public static String findData( String name , LambdaInterface finde ...

  3. jdk8 lambda表达式总结

    Java8 lambda表达式10个示例   1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnab ...

  4. Lambda表达式和匿名内部类(I)

    本文git地址 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过 ...

  5. Java基础学习总结(69)——匿名内部类与Lambda表达式

    前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedy ...

  6. dk7和jdk8的一些新特性

    本文是我学习了解了j 的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwork/java/javase/jdk7-relnotes- ...

  7. 史上最全jdk新特性总结,涵盖jdk8到jdk15!

    前言 在本文中,我将描述自第8版以来Java最重要且对开发人员友好的功能.为什么会有这样的主意?在Web上,您可以找到许多文章,其中包含每种Java版本的新功能列表.但是,由于缺少文章,因此无法简要概 ...

  8. JDK8 一文搞定👍

    ! https://zhuanlan.zhihu.com/p/442182870 Java8 新特性 学习来源于 B站 尚硅谷yyds Java学习源码 2021/11/22 距离,过年还有 57 天 ...

  9. jdk7和8的一些新特性介绍

    jdk7和8的一些新特性介绍 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwor ...

随机推荐

  1. Python代码编写规范

    Python代码编写规范 编码: a)     如无特殊情况,文件一律使用UTF-8编码 b)     如无需特殊情况,文件头部必须加入#-*-coding:utf-8-*- 缩进 a)     统一 ...

  2. 解决nginx发布网站跨目录访问

    解决nginx发布网站跨目录访问(thinkphp5+lnmp) 到:usr/local/nginx/conf/vim fastcgi.cof 把最后一行加上井号#注释掉保存重启 restart 参考 ...

  3. nagios 配置 check_traffic 流量监控模块(被监控端)

    安装软件包yum -y install net-snmp*chkconfig nrpe onchkconfig snmpd on 使用SCP命令拷贝 check_traffic.sh 到 / usr/ ...

  4. Atcoder 乱做

    最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...

  5. Java 枚举 的学习

    在JDK5.0之后,引进了一种与C语言相通的枚举类型. 所谓枚举类型就是指含有一组具有固定值, 并且容量有限的数据集合. 例如,定义一个星期的枚举类型, 从周一到周日是具有固定大小和固定值的集合 pu ...

  6. Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解

    BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcesso ...

  7. Codeforces | CF1029C 【Maximal Intersection】

    论Div3出这样巨水的送分题竟然还没多少人AC(虽说当时我也没A...其实我A了D...逃) 这个题其实一点都不麻烦,排序都可以免掉(如果用\(priority \_ queue\)的话) 先考虑不删 ...

  8. 深入浅出QOS详解(转)

    QOS学习笔记 (工作时间之余,总结了这些,累的食指快脱节了,现在还在恢复中,为的就是让文章质量再提高点,希望对大家有帮助!文章太长,为方便,我附件上文章原文.) QOS,服务质量.顾名思义,就是为了 ...

  9. Ubuntu18.04 下 VirtualBox or VMWare 虚拟化问题

    This host supports Intel VT-x, but Intel VT-x is disabled.Intel VT-x might be disabled if it has bee ...

  10. request.getRequestDispatcher 页面跳转,样式丢失。

    在页面中引用样式和其它资源的时候,尽量不要用相对路径,因为"当前路径"这个概念在J2EE中是不稳定的. 所以最好都是绝对路径,类似于: <% String cp = requ ...