首页 > 编程知识 正文

java函数式编程pdf,java数组的方法

时间:2023-05-06 20:30:30 阅读:38044 作者:2183

转换列表

将集合转换为新集合就像遍历它一样简单。 假设将列表的名称转换为大写。 看看有什么实现方法。

Java字符串不变,无法更改。 我们可以生成新字符串以替换列表中的原始元素。 但是,这样做的话,原来的名单就没有了; 另一个问题是,原始清单可能也不变。 例如,修改原始列表是不行的,因为它是由Arrays.asList ()生成的。 另一个缺点是这样做很难并行操作。

制定新的全部大写字母列表是个不错的选择。

乍一看,这个建议听起来很弱; 表演是我们关注的问题。 psddc,函数型编程比通常命令型性能更高,在第153页的性能问题上进行论述。

首先,让我们用这个集合生成大写的新集合。

finallistuppercasenames=new ArrayList (;

for(stringname:friends ) {

upper case names.add (name.toupper case () );

}

指令表达式代码首先创建空列表,嵌入大写名称,并在遍历原始列表时每次插入一个。 为了改进函数表达式的版本,第一步考虑使用19页遍历列表中的内部迭代器forEach替换for循环,如下例所示。

finallistuppercasenames=new ArrayList (;

friends.foreach (name-upper case names.add ) name.touppercase ();

system.out.println (upper case names;

虽然使用了内部迭代器,但必须创建新列表,然后插入元素。 我们可以进一步改善。

使用lambda表达式

新引入的流接口具有一个map方法,该方法脱离了可变性,使代码看起来更简洁。 Steam就像集合的迭代器,还提供了“流函数”(fluent functions )功能。 使用此接口的方法可以组合一系列调用,使其易于阅读,就像代码描述问题的顺序一样。

Steam的map方法可以用于将输入序列转换为输出的序列——。 这和我们打算做的工作很一致。

friends.stream (

. map(name-name.touppercase ) )

. foreach(name-system.out.print ) name ' );

System.out.println (;

所有JDK8集合都支持此stream方法,并将集合封装在一个Steam实例中。 map方法为Stream中的每个元素调用了指定的lambda表达式或代码块。 map方法与forEach方法大不相同,forEach只是对集合中的元素执行了指定的函数。 map方法汇总lambda表达式的执行结果并返回结果集。 最后用forEach法打印了所有元素。

新收藏的名称都是大写的:

激昂的西装NATE NEAL RAJU zydcdq SCOTT

map方法适用于将输入集合转换为新的输出集合。 这种方法确保输入/输出序列的元素数相同。 但是,输入元素和输出元素的类型可以不同。 在本例中,输入和输出都是字符串的集合。 可以将代码传递给map方法,以返回名称中包含的字符数等。 这样,输入的还是字符串序列,输出的是数字序列。 如下所示。

friends.stream (

. map(name-name.length ) )

. foreach(count-system.out.print ) count ' );

结果,每个名称的字母数:

5 4 4 4 4 5

使用lambda表达式的后续版本避免了显式更改操作。 这样的代码很简洁。 这样写,就不需要初始化空集合及其垃圾变量; 这个变量乖乖地隐藏在底层的实现中。

使用方法引用

也可以用方法引用,使其更简洁。 在需要实现传递的函数类型接口的位置,Java编译器可以接受lambda表达式或方法引用。 有了此特性,可以在String:toUpperCase中替换name - name.toUpperCase ()。 就像这样。

friends.stream (

. map (字符串:3360 toupper case ) )。

. foreach (name-system.out.println ) name );

当参数传递到此生成的方法——函数类型接口的抽象方法实现——时,Java将调用此String参数的toUpperCase方法。 此参数的引用在此处隐藏。 前面这些简单的场景可以用方法引用来替换

换掉lambda表达式;更多的内容看一下26页的什么时候应该使用方法引用。

小伙伴发问了:

什么时候应该使用方法引用?

当使用Java编程的时候,通常我们用lambda表达式的时候要比方法引用多得多。但这并不意味着方法引用不重要或者没啥用处。当lambda表达式非常简短的时候,它是一个很好的替代方案,它直接调用了实例方法或者静态方法。也就是说,如果lambda表达式只是传递了一下参数给方法调用的话,我们应该改用方法引用。

像这样的lambda表达式,有点像Tom Smykowski在电影上班一条虫中讲的那样,它的工作就是"从客户那把需求拿给软件工程师"。因为这个,我把这种重构成方法引用的模式叫做上班一条虫模式。

除了简洁外,使用方法引用,方法名字本身的含义和作用可以更好的体现出来。

使用方法引用背后,编译器起到了很关键的作用。方法引用的目标对象和参数都会从这个生成的方法里传进来的参数那推导出来。这才使得你可以使用方法引用写出比使用lambda表达式更简洁的代码。不过,如果参数在传递给方法之前或者调用结果在返回之后要被修改的话,这种便利的写法我们就用不了了。

在前面这个例子中,方法引用是引用了一个实例方法。方法引用还可以引用一个静态方法以及接受传参的方法。后面我们会看到这样的例子。

lambda表达式能帮助我们遍历集合,并且进行集合的转化。就像下面我们即将看到的,它还能帮助我们快速的从集合中选取一个元素。

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