1.8 新特性之 Lambda Expressions
Lambda expressions are allowed only at source level 1.8 or above
The target type of this expression must be a functional interface
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
由来:
One issue with anonymous classes is that if the implementation of your anonymous class is very simple, such as an interface that contains only one method, then the syntax of anonymous classes may seem unwieldy and unclear. In these cases, you're usually trying to pass functionality as an argument to another method, such as what action should be taken when someone clicks a button. Lambda expressions enable you to do this, to treat functionality as method argument, or code as data.
The previous section, Anonymous Classes, shows you how to implement a base class without giving it a name. Although this is often more concise than a named class, for classes with only one method, even an anonymous class seems a bit excessive and cumbersome. Lambda expressions let you express instances of single-method classes more compactly.
应用对象(functional interface)
A functional interface is any interface that contains only one abstract method.
语法:
- A comma-separated list of formal parameters enclosed in parentheses.
- The arrow token,
-> - A body, which consists of a single expression or a statement block.
举例(参数类型可以省略,单参数可省略() parentheses,单语句可省{}brace):
import org.junit.Test;
public class SomeoneTest {
@Test
public void test1() {
Someone a = new Someone() {
@Override
public String doSomething(String arg) {
return "::" + arg;
}
};
System.out.println(a.doSomething("a"));
}
@Test
public void test2() {
Someone b = (String arg) -> {
return "::" + arg;
};
System.out.println(b.doSomething("b"));
}
@Test
public void test3() {
Someone c = arg -> "::" + arg;
System.out.println(c.doSomething("c"));
}
}
interface Someone {
String doSomething(String arg);
}
多参数必须加()
import org.junit.Test;
public class DogTest {
@Test
public void test1() {
Dog a = (s1, s2) -> {
System.out.println(s1 + s2);
};
a.bark("wang", "wang");
}
@Test
public void test2() {
Dog b = (s1, s2) -> System.out.println(s1 + s2);
b.bark("wang", "wang");
}
}
interface Dog {
void bark(String s1, String s2);
}
无参数必须是 () ->
import org.junit.Test;
public class CatTest {
@Test
public void test1() {
Cat a = () -> System.out.println("miao~");
a.meow();
}
}
interface Cat {
void meow();
}
更多高级用法见 package java.util.function;
1.8 新特性之 Lambda Expressions的更多相关文章
- jdk8新特性之lambda expressions
本文分两部分: 语法简单说明 lambda的使用 注:这两部分内容均以类+注释的方式进行说明,并且内容均来自官方教程(https://docs.oracle.com/javase/tutorial/j ...
- Java8新特性系列-Lambda
转载自:Java8新特性系列-Lambda – 微爱博客 Lambda Expressions in Java 8 Lambda 表达式是 Java 8 最流行的特性.它们将函数式编程概念引入 Jav ...
- java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...
- JDK8新特性之一Lambda
JDK8的新特性之一Lambda能将函数作为方法里面的参数使用. /** * JDK8新特性Lambda */ public class Test { public static void main( ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- jdk1.8新特性之lambda表达式及在Android Studio中的使用举例
Jdk1.8已经出很久了但是很多同学对它的特性在android studio 中的应用可能还不是很熟悉,今天我们就来对这个新特性在AS中做它的应用实践. 一.首先在有JDK1.8的情况下我们要在AS的 ...
- Java 8新特性之lambda(八恶人-2)
Major Marquis Warren 沃伦·马奎斯少校 “Tring to get a couple of bounties in to Red Rock.”我想带几个通缉犯去红石镇 一.基本介绍 ...
- Java8新特性之Lambda表达式
lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...
- C++11新特性之一——Lambda表达式
C++11新特性总结可以参考:http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html#section_6.8 C++ ...
随机推荐
- Struts2 <s:select >标签的使用
select 取值session中的内容 <s:select name="meal.mealseries.seriesid" list="#session.meal ...
- Getting started - RN1
0. down yarn https://yarnpkg.com 1. Expo Cli 此环境用于开发或学习之用. (1)install npm install -g expo-cli (2) us ...
- Python · 进度条
(这里是本章会用到的 GitHub 地址) 我实现的这个进度条可能是可以当做一个第三方库来使用的(这个人好自大,啧),它支持记录并发程序的进度且损耗基本只来源于 Python 本身 先来看看我们的进度 ...
- RF:操作笔记
1.变量运算
- scrollview嵌套recyclerview显示不全现象
只需在recyclerview的外层加入一个父布局就好了 <RelativeLayout android:layout_width="match_parent" androi ...
- linux 僵尸进程查看方式
ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]' # 结果 Z 169925 49893 [sw] <defunct> Z 169925 120690 ...
- 《面向对象程序设计(java)》第七周学习总结
1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合 ...
- ---mingw Linux交叉编译给Window的工具
https://arrayfire.com/cross-compile-to-windows-from-linux/
- 2019最新整理PHP面试题附答案
1.什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2.SESSION 与 COOKIE的区别是什么,请从协议, ...
- 网站加入QQ在线客服
<!-- qq客服 --> <div class="QQFloat" > <div class="qq"> <div ...