函数式编程--使用lambda表达式
public class Test
{
//处理数组
public void process(int[] array, Command cmd)
{
cmd.process(array);
} public static void main(String[] args)
{
Test test = new Test();
int[] target = { 1, 2, 3 };
test.process(target, new Command()
{ @Override
public void process(int[] array)
{
for (int i : target)
{
System.out.println(i);
}
}
});
}
} interface Command
{
//处理数组的行为
void process(int[] array);
}
现在我们使用lambda表达式改一下上面的代码:
public class Test
{
//处理数组
public void process(int[] array, Command cmd)
{
cmd.process(array);
} public static void main(String[] args)
{
Test test = new Test();
int[] target = { 1, 2, 3 };
test.process(target, (int[] array) ->
{
for (int i : target)
{
System.out.println(i);
}
});
}
} @FunctionalInterface
interface Command
{
//处理数组的行为
void process(int[] array);
}
public class Test
{ public void testA(A a)
{
System.out.println(a);
a.test();
} public void testB(B b)
{
System.out.println(b);
b.test("111");
} public void testC(C c)
{
System.out.println(c);
System.out.println("这里是接口C的表达式:" + c.test(1, 2));
} public static void main(String[] args)
{
Test test = new Test();
test.testA(() ->
{
System.out.println("这里是接口A的lambda表达式");
});
//上面的代码块只有一行代码,可以简写
test.testA(() -> System.out.println("这里是接口A的lambda表达式")); test.testB((str) -> System.out.println("这里是接口B的lambda表达式" + str));
//上面的形参参数只有一个,可以简写
test.testB(str -> System.out.println("这里是接口B的lambda表达式" + str)); test.testC((a, b) ->
{
return (a + b);
});
//上面的代码块只有一行代码,可以省略花括号,也可以省略return语句
test.testC((a, b) -> a + b);
}
} @FunctionalInterface
interface A
{
void test();
} @FunctionalInterface
interface B
{
void test(String str);
} @FunctionalInterface
interface C
{
int test(int a, int b);
}
public class Test
{ public static void main(String[] args)
{
A a = (b) ->
{
if (b > 0)
{
return 1;
}
};
}
} @FunctionalInterface
interface A
{
int test(int a);
}
4),为了在目标类型上下文中使用lambda表达式,抽象方法的类型和表达式的类型必须兼容。具体来说,lambda表达式的参数的类型和数量必须与方法的参数兼容,返回类型必须兼容,并且lambda表达式可能抛出的异常也必须能被方法接受。
int a;
test.testC((a, b) ->a + b);
函数式编程--使用lambda表达式的更多相关文章
- Java 函数式编程(Lambda表达式)与Stream API
1 函数式编程 函数式编程(Functional Programming)是编程范式的一种.最常见的编程范式是命令式编程(Impera Programming),比如面向过程.面向对象编程都属于命令式 ...
- Java 函数式编程和Lambda表达式
1.Java 8最重要的新特性 Lambda表达式.接口改进(默认方法)和批数据处理. 2.函数式编程 本质上来说,编程关注两个维度:数据和数据上的操作. 面向对象的编程泛型强调让操作围绕数据,这样可 ...
- Python函数式编程:Lambda表达式
首先我们要明白在编程语言中,表达式和语句的区别. 表达式是一个由变量.常量.有返回值的函数加运算符组成的一个式子,该式子是有返回值的 ,如 a + 1 就是个表达式, 单独的一个常量.变量 或函数调 ...
- C# 函数式编程 —— 使用 Lambda 表达式编写递归函数
最近看了赵姐夫的这篇博客http://blog.zhaojie.me/2009/08/recursive-lambda-expressions.html,主要讲的是如何使用 Lambda 编写递归函数 ...
- Java函数式编程和lambda表达式
为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...
- Java8函数式编程和lambda表达式
文章目录函数式编程JDK8接口新特性函数接口方法引用函数式编程函数式编程更多时候是一种编程的思维方式,是一种方法论.函数式与命令式编程区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉 ...
- Java8函数式编程以及Lambda表达式
第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...
- Java函数式接口与Lambda表达式
什么是函数式接口? 函数式接口是一种特殊的接口,接口中只有一个抽象方法. 函数式接口与Lambda表达式有什么关系? 当需要一个函数式接口的对象时,可以提供一个lambda表达式. package l ...
- Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法
1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...
随机推荐
- ES6小点心之通用弹窗
小点心,顾名思义,开箱即食,拿来即用. 前端业务逻辑主要分为[交互效果]和[数据展示]两方面.数据展示可使用 MVVM 框架来实现.前端的交互效果常用的也就那么几种,比如弹窗,楼层定位,倒计时,下拉刷 ...
- 用call和ret实现子程序
ret和call是另外两种转移指令,它们与jmp的主要区别是,它们还包含入栈和出栈的操作.具体的原理如下: ret操作相当于:pop ip(直接将栈顶元素赋值给ip寄存器) call s的操作相当于: ...
- [转]python json.dumps 中的ensure_ascii 参数引起的中文编码
本文转自: 梁小白博客(http://biangbiang.cnblogs.com) 在使用json.dumps时要注意一个问题 >>> import json >>&g ...
- jsp+servlet登录框架模板
一.建立一个名叫jsp_servlet的工程 二.建立一个AcountBean类和CheckAccount类 1.AcountBean类包含登录名(username)和登录密码(password) p ...
- ------- 当前全球最新的 IPv4 地址池使用报告 -------
-------------------------------------------------------------- 对于互联网行业相关的从业人员而言,时刻关注 IPv4 地址池的状态此类&q ...
- 【Html5】-- 塔台管制
想做这个游戏已久,今天终于初步完成,先解释下,这是一个模拟机场塔台管制指挥的游戏,飞机从不同的方向飞入管制空域,有不同的目的地,飞机名称最后一个字母表示飞机要到达的目的地,分ABCD和R.A-D表示四 ...
- DOCKER 开发学习记录
DOCKER常用命令及参数 DOCKER镜像管理命令: 检索:docker search image_name 下载:docker pull image_namge 查看本地镜像:docker ima ...
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- ES5.0集群搭建
最近在网上看到很多ES集群的搭建方法,本人在这人使用Elasticsearch5.0.1版本,介绍如何搭建es集群并安装head插件和其他插件安装方法. 一.搭建环境(2台Centos7系统服务器) ...
- 深入设计电子计算器(一)——CPU框架及指令集设计
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/8278418.html 作者:窗户 Q ...