[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 ...
随机推荐
- HDU4625 JZPTREE 【树形DP】【第二类斯特林数】
题目大意: 对1到n求题目中描述的那个式子. 题目分析: 幂不好处理,转化为斯特林数. 根据$ n^k= \sum_ { i=0 }^k S(k,i)×i!×C(n,i) $. 我们可以将问题转化为对 ...
- c# Redis 使用
1.服务端两个版本窗口版与安装windows服务版 1.1.窗口版 下载地址:https://github.com/dmajkic/redis/downloads redis-server.exe:服 ...
- pycharm opencv4.0安装使用
pycharm+opencv4.0 还记得去年冬天装了两回opencv3,每次都搞得死去活来的.. 今天也是查了一上午,什么anaconda,vs,但是我是在pycharm的虚拟环境中安装,突然看到一 ...
- git同步远程已删除的分支和删除本地多余的分支
使用 git branch -a 可以查看本地分支和远程分支情况 但远程分支(红色部分)删除后,发现本地并没有同步过来. 一. 同步本地的远程分支 查看本地分支和追踪情况: git remote sh ...
- Mysql 语句优化
通过 show status 命令了解各个 sql 语句的执行频率格式:Mysql> show [session | global] status;注:session 表示当前连接global ...
- 最小表示法模板(洛谷P1368 工艺)(最小表示法)
洛谷题目传送门 最小表示是指一个字符串通过循环位移变换(第一个移到最后一个)所能得到的字典序最小的字符串. 因为是环状的,所以肯定要先转化为序列,把原串倍长. 设决策点为一个表示法的开头.比较两个决策 ...
- Codeforces | CF1010C 【Border】
这道题大致题意是给定\(n\)个十进制整数和一个进制数\(k\),可以用无数多个给定的十进制整数,问这些十进制整数的和在模k意义下有多少种不同的结果(\(k\)进制下整数的最后一位就是这个数模\(k\ ...
- python服务器文件上传下载+GUI【tkinter】
大概就是一个通过应用程序来和服务器打交道的这么一个,小东西 1.GUI 用的是tkinter # -*- coding: UTF-8 -*- from tkinter import * import ...
- hdu 3790 最短路问题 (spfa练手)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- ASP.NET MVC什么时候使用异步Action
在没有使用异步Action之前,在Action内,比如有如下的写法: public ActionResult Index() CustomerHelper cHelper = new Customer ...