我是靠谱客的博主 鲤鱼服饰,最近开发中收集的这篇文章主要介绍grails 调用java_如何从groovy调用Java的Stream.collect()?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

从Scala获得FP的一些背景我真的不喜欢Groovy的集合方法名称.考虑到上面提到的一些架构选择,我发现在Groovy代码中使用Java 8流API(加上java.util.Optional)是一个吸引人的解决方案.

直到我点击这个:

def finalCollection = [ 'some', 'items', 'really', 'not', 'important' ].stream()

.map { aMethodReturningOptional(it) } //map String to Optional

.flatMap { it.map(Stream.&of).orElseGet(Stream.&empty) } //convert to Stream

.collect() //Groovy's collect, not stream's!

请注意,它仅适用于Groovy 2 – treating closure as lambda.

困扰我的是示例代码的最后一行. Groovy将调用转换为DefaultGroovyMethods.collect()而不是我最初想要使用的Stream.collect().当然最后一行是:

.collect(Collectors.toList()) //Should call Java collect, but it doesn't

这对我来说似乎是违反直觉的,有些扩展方法被调用而不是本机的“内置”方法.

如何重写示例以便调用Stream.collect()方法?

更新:经过一些更多的摆弄,我发现我原来有什么问题.我写了.collect {Collectors.toList()}(注意花括号),当然称为Groovy方法,而不是Java.自我注意:记得在发布之前进行四重检查…

解决方法:

import java.util.stream.*

class Item {

final String name

Item(name) {

this.name = name

}

@Override

String toString() {

name

}

}

def itemize(String name) {

Optional.of(new Item(name))

}

def finalCollection = [ 'some', 'items', 'really', 'not', 'important' ].stream()

.map { itemize(it) } //map String to Optional

.flatMap { it.map(Stream.&of).orElseGet(Stream.&empty) } //convert to Stream

.collect (Collectors.toList())

assert 'java.util.ArrayList' == finalCollection.class.name

assert finalCollection.collect { it.name } == ['some', 'items', 'really', 'not', 'important']

无论如何,通过groovy 2.4.5上面也正在使用

def finalCollection = [ 'some', 'items', 'really', 'not', 'important' ].stream()

.map { itemize(it) } //map String to Optional

.flatMap { it.map(Stream.&of).orElseGet(Stream.&empty) } //convert to Stream

.collect()

transforming each item into a new value using Closure.IDENTITY as a

transformer, basically returning a list of items copied from the

original object.

标签:java,groovy,java-stream

来源: https://codeday.me/bug/20190623/1271888.html

最后

以上就是鲤鱼服饰为你收集整理的grails 调用java_如何从groovy调用Java的Stream.collect()?的全部内容,希望文章能够帮你解决grails 调用java_如何从groovy调用Java的Stream.collect()?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部