Java Stream with :: new to Kotlin

Jer*_*rry 3 spring kotlin

我正在尝试将以下Spring Security代码从Java转换为Kotlin.

Java的:

Collection<? extends GrantedAuthority> authorities =
        Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(","))
            .map(SimpleGrantedAuthority::new)
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

科特林:

val authorities = Arrays.stream(claims[AUTHORITIES_KEY].toString().split(",".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray())
        .map(SimpleGrantedAuthority())
        .collect(Collectors.toList<SimpleGrantedAuthority>())
Run Code Online (Sandbox Code Playgroud)

我得到一个类型不匹配错误(Required: Function<in String!, out (???..???)>!).map(SimpleGrantedAuthority()).如何::new正确地将上述Java代码转换为Kotlin ?

mie*_*sol 5

使用Arrays.stream不会使代码超级可读:

val authorities = Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",").toTypedArray())
     .map(::SimpleGrantedAuthority).collect(Collectors.toList<SimpleGrantedAuthority>())
Run Code Online (Sandbox Code Playgroud)

但是在Kotlin你可以做得更好:

val authorities = claims.get(AUTHORITIES_KEY).toString()
                .split(",").filterNot { it.isEmpty() }
                .map(::SimpleGrantedAuthority)
Run Code Online (Sandbox Code Playgroud)