[JDK8] Lambda
本文转载原文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的更多相关文章
- jdk8 Lambda表达式与匿名内部类比较
Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...
- JDK8 Lambda表达式对代码的简化
只是举个例子: public class LambdaDemo { public static String findData( String name , LambdaInterface finde ...
- jdk8 lambda表达式总结
Java8 lambda表达式10个示例 1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnab ...
- Lambda表达式和匿名内部类(I)
本文git地址 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过 ...
- Java基础学习总结(69)——匿名内部类与Lambda表达式
前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedy ...
- dk7和jdk8的一些新特性
本文是我学习了解了j 的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwork/java/javase/jdk7-relnotes- ...
- 史上最全jdk新特性总结,涵盖jdk8到jdk15!
前言 在本文中,我将描述自第8版以来Java最重要且对开发人员友好的功能.为什么会有这样的主意?在Web上,您可以找到许多文章,其中包含每种Java版本的新功能列表.但是,由于缺少文章,因此无法简要概 ...
- JDK8 一文搞定👍
! https://zhuanlan.zhihu.com/p/442182870 Java8 新特性 学习来源于 B站 尚硅谷yyds Java学习源码 2021/11/22 距离,过年还有 57 天 ...
- jdk7和8的一些新特性介绍
jdk7和8的一些新特性介绍 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwor ...
随机推荐
- 大学jsp实验七--JavaBean在JSP中的应用
值bean的应用 (1)若有如下图所示的两个JSP页面,在第一个的页面的表单中填写相应内容,提交后再显示用户的提交信息.使用JavaBean的方式实现上述效果,请写出相应的代码. bean文件:Tes ...
- window文件过长无法删除的处理方式
解决方案: 如:aaa是要删除的文件夹,进入到要删除的文件夹下,新建一个test 1.以管理员身份打开CMD: 2 新建test空白目录: 3 执行命令,删除aaa文件夹:robocopy te ...
- IDEA修改module的名字
首先右键module名,选择[Refactor]-[Rename...] 然后选择[Rename module] 只修改这些对于当前开发是没有问题了 但是刚开始把module添加成maven项目的时候 ...
- SQL循环语句 详解
SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+ ...
- HDOJ 5667 Sequence//费马小定理 矩阵快速幂
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5667 题意:如题给了一个函数式,给你a,b,c,n,p的值,叫你求f(n)%p的值 思路:先对函数取以a为 ...
- Android多种方法显示当前日期和时间
文章选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文探讨Android显示当前日期和时间的方法. ...
- Android客户端与数据库交互数据的简单学习
Ø 数据库整理方案如下: 一.Android+ webservices+SQLServer : 通过webservices客户端向指定服务器发送请求,服务器响应返回指定格式的数据,如json或者x ...
- [NOIP提高组2011day1t2]选择客栈
我看到有人用线段树来写而且想法和我的差不多,但是代码有一点复杂,所以我就贴一下我的做法. 思路 首先一定知道纯暴力50分差不多了,所以看到k非常的小,那么就从k入手. 不知道有没有人和我一样是先枚举颜 ...
- mysql安转过程中出现的问题! Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exis
net start mysql启动失败,报错信息如上,因缺少mysql这个库 所以跳过 在my.ini中添加 --skip-grant-tables 再启动mysql 然后进入mysql 倒入一个从其 ...
- POJ--1056 IMMEDIATE DECODABILITY && POJ--3630 Phone List(字典树)
题目链接 题目大意 看输入的每个字符串中是否有一个字符串是另一个字符串的前缀 #include<iostream> #include<cstring> #include< ...