- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章基于Java8 函数式接口理解及测试由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1. 函数式接口的理解 。
根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来看,Java8新引入的函数式接口就是基于这个思想进行设计的.
2. 函数式接口定义 。
2.1 自定义如下 。
需要FunctionalInterface关键字显示声明:
1
2
3
4
|
@FunctionalInterface
public
interface
AppleInterface {
public
void
test();
}
|
2.2 系统预定义 。
1
2
3
4
|
java.util.function.Consumer;
java.util.function.Function;
java.util.function.Predicate;
java.util.function.Supplier;
|
可以去查看源码了解具体的细节,这几个接口包括了常用的一些场景,一般可满足需要 。
3. 函数式接口的使用 。
函数式接口一般使用前需要先定义,也可以使用系统预定义的几个函数式接口 。
函数式接口的使用和使用一个变量没有区别,显示声明定义,格式如下:
1
|
FunctionInterface interface=null;
|
这里的interface虽然看起来是一个变量,可是实际却是一段行为代码,用于执行具体的业务逻辑,可以自由在方法接口间传递,也可以直接执行 。
interface.doSomeThing(),
如定义函数式接口为参数的接口:
1
2
3
4
|
public void filter(FunctionInterface interface)
{
interface.doSomeThing();
}
|
4. 函数式接口练习 。
4.1 自定义实体类Apple 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Apple {
private String color;
private float weight;
public Apple(String color, float weight) {
this.color = color;
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
|
4.2 自定义函数式接口 。
该接口有一个test方法,不接收任何参数,也没有任何返回 。
1
2
3
4
|
@FunctionalInterface
public interface AppleInterface {
public void test();
}
|
4.3 测试自定义函数式接口 。
1
2
3
4
5
6
|
@Test
public void DefineFunctionInterface(){
//自定义函数式接口
AppleInterface at=()->System.out.println("define FunctionInterface AppleInterface.");
at.test();
}
|
至此,就完成一个很简单的函数式接口的定义和调用 。
4.4 系统预定义函数式接口 。
Consumer<T>:该接口接收一个对象T,返回void,测试如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Test
public void ConsumerTest(){
Consumer<
Apple
> consumer=(Apple app)->{System.out.println(app.getColor()+","+app.getWeight());};
List<
Apple
> apps=Arrays.asList(new Apple("red", 120),new Apple("blue", 80),
new Apple("green",100));
ConsumerApple(apps,consumer);
}
public void ConsumerApple(List<
Apple
> apps,Consumer<
Apple
> c){
for(Apple app:apps){
c.accept(app);
}
}
|
Supplier<T>:该接口不接收任何参数,返回一个对象T,测试如下:
1
2
3
4
5
6
|
@Test
public void SupplierTest(){
Supplier<
Apple
> supplier=()->{return new Apple("hello supplier",999);};
Apple app=supplier.get();
System.out.println(app.getColor()+","+app.getWeight());
}
|
Predicate<T>:该接口接收一个对象T,返回一个Boolean 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@Test
public void PredicateTest(){
//系统预定义函数式接口测试
Predicate<
Apple
> p1=(Apple a)->{if(a.getWeight()>90) return true;return false;};
Predicate<
Apple
> p2=(Apple a)->{if(a.getColor().equals("blue")) return true;return false;};
List<
Apple
> apps=Arrays.asList(new Apple("red", 120),new Apple("blue", 80),
new Apple("green",100));
filterApple(apps,p1);//筛选重量大于90g的苹果
filterApple(apps,p2);//筛选蓝色的苹果
}
public void filterApple(List<
Apple
> apps,Predicate<
Apple
> p){
for(Apple app:apps){
if(p.test(app)){
System.out.println(app.getColor()+","+app.getWeight());
}
}
}
|
Function<T,R>: 该接口接收一个对象T,经过转换判断,返回一个对象R 。
1
2
3
4
5
6
7
8
9
|
@Test
public void FunctionTest(){
Function<
String
,Apple> function=(String s)->{return new Apple(s,666);};
Apple app=function.apply("red");
System.out.println(app.getColor()+","+app.getWeight());
app=function.apply("green");
System.out.println(app.getColor()+","+app.getWeight());
}
|
以上这篇基于Java8 函数式接口理解及测试就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
最后此篇关于基于Java8 函数式接口理解及测试的文章就讲到这里了,如果你想了解更多关于基于Java8 函数式接口理解及测试的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试在我的代码库中为我正在编写的游戏服务器更多地使用接口(interface),并了解高级概念以及何时应该使用接口(interface)(我认为)。在我的例子中,我使用它们将我的包相互分离,并使
我有一个名为 Widget 的接口(interface),它在我的整个项目中都在使用。但是,它也用作名为 Widget 的组件的 Prop 。 处理此问题的最佳方法是什么?我应该更改我的 Widget
有一个接口(interface)可以是多个接口(interface)之一 interface a {x:string} interface b {y:string} interface c {z:st
我遇到了一种情况,我需要调用第三方服务来获取一些信息。这些服务对于不同的客户可能会有所不同。我的界面中有一个身份验证功能,如下所示。 interface IServiceProvider { bool
在我的例子中,“RequestHandlerProxy”是一个结构,其字段为接口(interface)“IAdapter”,接口(interface)有可能被调用的方法,该方法的输入为结构“Reque
我有一个接口(interface)Interface1,它已由类A实现,并且设置了一些私有(private)变量值,并且我将类A的对象发送到下一个接受输入作为Interface2的类。那么我怎样才能将
假设我有这样的类和接口(interface)结构: interface IService {} interface IEmailService : IService { Task SendAs
有人知道我在哪里可以找到 XML-RPC 接口(interface)的定义(在 OpenERP 7 中)?我想知道创建或获取对象需要哪些参数和对象属性。每个元素的 XML 示例也将非常有帮助。 最佳答
最近,我一直在阅读有关接口(interface)是抽象的错误概念的文章。一篇这样的帖子是http://blog.ploeh.dk/2010/12/02/InterfacesAreNotAbstract
如果我有一个由第三方实现的现有 IInterface 后代,并且我想添加辅助例程,Delphi 是否提供了任何简单的方法来实现此目的,而无需手动重定向每个接口(interface)方法?也就是说,给定
我正在尝试将 Article 数组分配给我的 Mongoose 文档,但 Typescript 似乎不喜欢这样,我不知道为什么它显示此警告/错误,表明它不可分配. 我的 Mongoose 模式和接口(
我有两个接口(interface): public interface IController { void doSomething(IEntity thing); } public inte
是否可以创建一个扩展 Serializable 接口(interface)的接口(interface)? 如果是,那么扩展接口(interface)的行为是否会像 Serilizable 接口(int
我试图在两个存储之间创建一个中间层,它从存储 A 中获取数据,将其转换为相应类型的存储 B,然后存储它。由于我需要转换大约 50-100 种类型,我希望使用 map[string]func 并根据 s
我正在处理一个要求,其中我收到一个 JSON 对象,其中包含一个日期值作为字符串。我的任务是将 Date 对象存储在数据库中。 这种东西: {"start_date": "2019-05-29", "
我们的方法的目标是为我们现有的 DAO 和模型类引入接口(interface)。模型类由各种类型的资源 ID 标识,资源 ID 不仅仅是随机数,还带有语义和行为。因此,我们必须用对象而不是原始类型来表
Collection 接口(interface)有多个方法。 List 接口(interface)扩展了 Collection 接口(interface)。它声明与 Collection 接口(int
我有一个 Java 服务器应用程序,它使用 Jackson 使用反射 API 对 DTO 进行一般序列化。例如对于这个 DTO 接口(interface): package com.acme.libr
如果我在 Kotlin 中有一个接口(interface): interface KotlinInterface { val id: String } 我可以这样实现: class MyCla
我知道Java中所有访问修饰符之间的区别。然而,有人问了我一个非常有趣的问题,我很难找到答案:Java 中的 private 接口(interface)和 public 接口(interface)有什
我是一名优秀的程序员,十分优秀!