首页 > 编程知识 正文

java编程自学,java自学编程入门教程

时间:2023-05-03 23:59:47 阅读:38045 作者:2276

什么是函数式编程

在介绍函数型编程之前,让我们先了解一下我们平时使用的指令型编程。 指令式编程是教计算机如何一步一步地执行编程风格。

例如,从一个苹果对象集合中筛选颜色为红色的苹果集合。 你需要写下面的代码。

创建保存苹果的集合list

遍历此收藏

判断苹果的颜色是否为红色,如果满足条件的话添加到结果集合中

publicstaticlistgetredappledeclarative {

列表结果=new ArrayList (;

苹果:苹果(for ) {

if(red ).equals(apple.getcolor ) ) ) ) ) ) ) )。

results.add(apple;

}

}

返回结果;

}

函数式编程是如何操作的呢? 函数式编程类似于sql语句

select * from table where条件语句

你想要什么,然后只宣布条件就行了

publicstaticlistgetredapplefunctional (列表应用程序) {

returnapples.stream((.filter ) apple-' red '.equals (apple.getcolor ) ).collect (collectors.to list ) ) )

}

可见函数式编程大大简化了代码语句。 另外,如果熟悉函数类型结构,就能很快知道这段代码的含义。stream将apples集合流-过滤器过滤满足的条件-collect转换为列表输出

比起繁琐的指令式代码,我们的函数式编程可以让代码瞬间充满清新的学院风。 当然,马上学习,为下一个b的需要做准备吧。

通过与数学函数的对比加深对函数编程的理解

数学中函数思想是众所周知的。 例如,根据输入x求出的y值,用数学函数表示以y=f(x )=x 10、x为输入,以x 10为结果

在java函数式编程样式中

函数函数=(x )-{return x 10; (;

具体调用:

公共统计函数计算(功能功能) {

returnfunction.apply(10;

}

publicstaticvoidmain (字符串[ ] args ) {

函数函数=(x )-{return x 10; (;

整数结果=计算(功能);

}

在上面的代码中,main函数显示我们定义的function是数学函数f(x )。 将定义的函数传递给方法caculate。 在caculate中,function.apply ) 10 )相当于调用了数学函数f ) 10 )。

lambda公式

上面的Function接口表示数据函数f(x )=x 10。 此函数是lambda表达式,lamdba表达式由参数箭头和主体组成,基本语法为: )参数-表示语句

使用lamdba的好处非常直观,程序员的意图清楚地体现在lambda公式中。

java8为lambda提供了功能包,并提供了lambda接口。 例如,上面的函数接口定义如下

@ functional接口

公共接口功能{

//*

* appliesthisfunctiontothegivenargument

*

* @param t the function argument

* @return the function result

*/

rapply(tt );

功能支持(defaultfunctioncompose? 扩展t before ) {

objects.requirenonnull(before );

返回(v ) -应用(before.apply ) v );

}

.

}

在Function接口中,除了用default限定的方法外,接口中只有一个方法apply。 这也是使用lambda接口所必需的。 他表示将给出输入t,并返回输出r。如果使用lamdba接口,他将使用表达式来表示实现接口的唯一方法apply ()

函数函数=(x )-{

system.out.println(x: ) string.valueof ) x );

返回x 10;

(;

lambda表达式的另一个表示形式是lambda方法引用。

在lambda方法引用描述符:3360中区分分类和方法的:3360前是类名; 后面是方法,但不加括号

//lamdba

predicateq={stringa}-{

return a.isEmpty (;

(;

如果用方法的引用表示:

predicate p=string :3360 isempty;

具体调用:

公共类lambda test {

publicstaticvoidlambdafunc (consumer consumer,Predicate predicate,字符串测试) {

boolean condition=predicate.test (' ';

if(condition ) {

consumer.accept(test;

}

}

publicstaticvoidmain (字符串[ ] args ) {

predicate p=string :3360 isempty;

consumer c=system.out :3360 println;

lambdafunc(c,p,' test ' );

}

}

上面的代码表示如果方法参数test不为空,则打印

lambda引用还包括替代函数类型接口和构造函数引用

代替函数型接口:

示例1 :

listtestlist=Arrays.aslist('a '、' b '、' a '、' b ' );

//testlist.sort((S1,s2 )-S1.comparetoignorecase ) ) s2 );

test list.sort (string :3360比较to ignore case;

system.out.println (测试列表);

示例2 :

publicstaticvoidmain (字符串[ ] args ) {

//functionF1=(stringa(-) returninteger.valueof ) a; (;

function F2=integer :3360 value of;

集成结果=F2.apply ('2);

system.out.println(result );

}

函数的泛型字符串表示返回类型,Integer表示输入类型,lambda引用根据泛型进行类型估计。

构造函数引用:

//方法引用的构造函数引用

public void构造队列(

//Supplier s1=() -新队列类);

suppliers2=quote class 33603360 new;

}

示例中Supplier返回泛型类的实例。

以上是函数型编程和lambda的介绍,接下来对java的stream进行分析。 下面介绍其中涉及的许多函数型编程的使用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。