三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> Java -> JDK1.8 之Lambda -> 正文阅读
 

[Java]JDK1.8 之Lambda

JDK1.8 之Lambda Lambda 理解的了很久才有一点小感觉。
一、使用线程

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;
    }
}

  Java 最新文章
三个目前比较常见的连接池的简单运用
Shiro:授权控制
初学者易上手的SSH
【基于初学者的SSH】struts2 的拦截器、令牌
初学者易上手的SSH
MyEclipse快捷键大全(绝对全)
ssm项目,web容器无法初始化项目
Mybatis的原理
tomcat源码学习(2)  关于apache&
eclipse报错:Failed to load the JNI shar
上一篇文章      下一篇文章      查看所有文章
加:2017-10-12 23:22:36  更:2017-10-12 23:22:56 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年10日历
2017-10-22 7:06:18
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库