JDK8 Lambdas

#JDK8 Lambdas 基础入门(一)

jdk8 重要的一个新特性就是lambdas
详细概念我就不一一介绍了,详细的请查看[lambdas](http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html#overview)

小栗子认识一下lambda 函数编程:
```java
public class LambdasTest {
public static void main(String[] args) {
List<String> names = Arrays.asList("palmg", "kai", "shui");
//按照字符的长度排序
Collections.sort(names, (first, second) -> first.length() - second.length());
//打印每个字符
names.forEach(System.out::println);
}
}

```

##详lambdas的使用

###1. 匿名函数 VS lambdas

```java
public class LambdasTest01 {
interface Message {
void send(Runnable runnable);

}
static class PhoneMessage implements Message {
private AtomicInteger num = new AtomicInteger(0);
@Override
public void send(Runnable runnable) {
runnable.run();
System.out.println("--------------我是分界线" + (num.getAndIncrement()) + "-----------------");
}
}

public static void main(String[] args) {
PhoneMessage phoneMessage = new PhoneMessage();
//1. jdk 8 之前我们需要实现一个匿名函数
phoneMessage.send(new Runnable() {
@Override
public void run() {
System.out.println("匿名函数写法");
}
});

//2. jkd8之后,我们可以这样
phoneMessage.send(() -> System.out.println("lambdas表达方式"));
}
}
```

执行结果:
```java
匿名函数写法
--------------我是分界线0-----------------
lambdas表达方式
--------------我是分界线1-----------------
```

###2. 集合排序 vs lambdas

```java

/**
* Lambdas Comparator
* Created by Kaishui on 2016/8/30.
*/
public class LambdasTest02 {
static class NameComparator implements Comparator<String> {
@Override
public int compare(String first, String second) {
return first.compareTo(second);
}
}
public static void main(String[] args) {
List<String> names = Arrays.asList("palmg", "kai", "shui");
System.out.println("1.方法一: jdk8之前,按照名称排序");
Collections.sort(names, new NameComparator());
for (String name : names) { //打印
System.out.println(name);
}

System.out.println("2.方法二: dk8之前,按照名称排序");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String first, String second) {
return first.compareTo(second);
}
});
for (String name : names) { //打印
System.out.println(name);
}

System.out.println("---------我只是一条分割线-------------");
System.out.println("3. jdk8 lamdas");
Collections.sort(names, (first, second) -> first.compareTo(second));
names.forEach(System.out::println);
}
}
```

上述两个例子看到不仅仅是一个代码量的差距,lambdas写得还是很优美的。

下一篇将介绍:Predicate、Consumer、Function、Supplier

时间: 2024-08-10 23:29:13

JDK8 Lambdas的相关文章

Java 8 不止是Lambdas和Streams

转眼淘系应用升级JDK8已经几个月过去了,Lambdas表达式和Streams APIs的确给同学们带来了编程效率和代码可读性上的提升,代码变得更加简洁直接,更加符合人的思维(看来编程语言的发展也是本着“以人为本”的思路).ATA上讲这两个新特性的文章已经很多了, 大鱼大肉大家吃的差不多,得常常家常小菜吧,下面总结一下常用的Java 8中Lambdas和Streams之外的一些新特性. 1. Default Method Java 单继承的特性决定了一个类只能有1个父类,如果有通用的方法实现就只

【转】ConcurrentHashMap完全解析(JDK6/7、JDK8)

转自http://my.oschina.net/hosee/blog/675884 并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O).ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS

jdk8新特性

jAVA8 十大新特性 投稿:junjie 字体:[增加 减小] 类型:转载 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API "Java is still not dead-and people are starting to figure that out." 本教程将用带注释的简单代码来描述新特性,你将

解决win7 安装完jdk7后,再安装jdk8出现的问题 has value &#39;1.8&#39;, but &#39;1.7&#39; is required.

http://blog.csdn.net/qiyueqinglian/article/details/46605759 电脑装了jdk8,JAVA_HOME也是设置的8. 不删除8变回7. 改了JAVA_HOME,并且path值里的C:\ProgramData\Oracle\Java\javapath也删了 运行java -version,报错 Error: Registry key ‘Software\JavaSoft\Java Runtime Environment’\CurrentVers

JDK8新特性 Lambda表达式

一.接口的默认方法二.Lambda 表达式三.函数式接口四.方法与构造函数引用五.Lambda 作用域六.访问局部变量七.访问对象字段与静态变量八.访问接口的默认方法九.Date API十.Annotation 注解:支持多重注解 一.接口的默认方法 Java8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: [java] view plain copy public interface Formula { double calcu

Linux下安装jdk8步骤详述

作为Java开发人员,在Linux下安装一些开发工具是必备技能,本文以安装jdk为例,详细记录了每一步的操作命令,以供参考. 0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对应jdk版本下载.(可在Windows下下载完成后,通过文件夹共享到Linux上) 1. 登录Linux,切换到root用户 su root 获取root用户权限,当前工作目

Ubuntu 安装 JDK 7 / JDK8 的两种方式

ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用ppa/源方式安装 1.添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 2.安装oracle-java-installer jdk7 sudo apt-get install oracle-java7-inst

JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final

今天看书的时候看到了局部内部类,书上说局部内部类可以访问局部变量,但是必须是final的.因为局部变量在方法调用之后就消失了,使用final声明的话该局部变量会存入堆中,和内部类有一样的声明周期.但是我写了一个局部内部类,竟然可以访问非final的局部变量,请问这是什么回事呢.ps:我的jdk是8 难道和这个有关系? public class jubuneibulei { public void p(int a, int b){ class te{ void print(){ System.ou

ubuntu1404安装配置java环境(jdk8)

这个安装比较简单,网上也有数不清的教学,我这里记录以下,方便以后万一失忆了回来看看能想起来.个人博客http://www.cnblogs.com/wdfwolf3/ 1.下载安装 言归正传,我们需要到官方下载安装包(http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html),根据自己的系统选择.tar.gz后缀安装包,同意协议下载即可.这里呢安装的JAVA SE是个人使用较多的标准版,J