Java8函数式编程

编程入门 行业动态 更新时间:2024-10-26 22:23:27

Java8<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数式编程"/>

Java8函数式编程

前言

lambda表达式和stream流是Java8中的新特性,然后如今也远远不能算上新了,但这种写法相比传统还是有很大的改观,在简洁代码的同时又不失可读性,这种可读性可以说是在代码语言之前的传统形式,对于编码者是新的形式,但对于初学者也许是更容易理解的,本篇文章主要结合《Java8函数式编程》书来总结一些学习经验

lambda表达式

lamda表达式是用来简化一些代码,首先看一个swing的原代码

button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){System.out.println("button clicked");}
})

这个方法实现了actionListener接口,通过重写actionPerformed,实现了一个输出动作
下面是简化后的代码

button.addActionListener(event->	System.out.println("button clicked"));

这里括号内相当于一个无名函数,箭头左边是参数,右边是la’mbda表达式
event 直接声明,不需要带类型,因为利用了javac的上下文推断其类型,根据addActionListener推断出类型ActionListener

各种形式

lambda表达式还有一些变体

Runnable noArguments = () ->System.out.println

括号为空代表无参数,因为run方法也无参且返回类型为void

ActionListener oneArgument = event ->	System.out.println("button clicked")

这种包含一个参数,且可省略

Runnable multiStatement = ()->{System.out.println("button clicked")
}

主体可以用大括号,标识表达式的开始结束,可以用return和异常退出

BinaryOperator<Long> add  =(x,y)->x+y;

多个参数,注意这里的尖括号里有类型,是为了方便编译器推断,如果不写默认为object类型,object 类型相加就会报错

引用“值”

final可以在第一次赋值后不再变化,引用这个变量就可以获取第一次的值,在lambda中可以直接引用值
原代码如下

final String name =getUserName();
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){System.out.println("hi"+name);}
})

简化后

String name = getUserName();
button.addActionListener(event->System.out.println("hi"+name));

这里的name也是final的,如果多次赋值,也是会报错的

类型推断

之前有类型推断的例子,这里补充一个

Predicate<Integer> atLeast5 = x ->x >5;

x>5返回一个布尔类型,是表达式的主体
下面是Predicate接口的源代码

public interface Predicate<T>{boolean test(T t);
}

Stream流

Stream流主要是针对for循环进行简化,事实上for循环也是对Iterator的hasNext进行的简化

int count =0;
for(Artist artist: allArtist){if(artist.isFrom("London")){count++;		}
}

简化后

long count = allArtists.stream().filter(artist.isFrom("London")).count();

stream对allAritists进行遍历,筛选出里面符合之后的条件的对象,作为一个集合,count再对这个集合进行求值

更多推荐

Java8函数式编程

本文发布于:2023-12-03 10:16:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1654217.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!