相关疑难解决方法(0)

标准Kotlin库中提供了哪些Java 8 Stream.collect等价物?

在Java 8中,Stream.collect允许对集合进行聚合.在Kotlin中,除了作为stdlib中的扩展函数的集合之外,它不以相同的方式存在.但目前尚不清楚不同用例的等价性.

例如,在JavaDocCollectors顶部是为Java 8编写的示例,当将它们移植到Kolin时,在不同的JDK版本上不能使用Java 8类,因此它们应该以不同的方式编写.

在网上显示Kotlin集合示例的资源方面,它们通常是微不足道的,并没有真正与相同的用例进行比较.什么是真正符合Java 8记录的案例的好例子Stream.collect?那里的清单是:

  • 将名称累积到列表中
  • 将名称累积到TreeSet中
  • 将元素转换为字符串并将它们连接起来,用逗号分隔
  • 计算员工工资的总和
  • 按部门分组员工
  • 按部门计算工资总额
  • 将学生分成传球和失败

以上链接的JavaDoc中的详细信息.

注意: 这个问题是由作者故意编写和回答的(答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.还要澄清为Kotlin的alphas写的一些非常古老的答案,这些答案对于当前的Kotlin来说是不准确的.

java collections java-8 kotlin java-stream

171
推荐指数
2
解决办法
3万
查看次数

Java 8流限制功能是否有任何等效的Kotlin功能

我试图在列表中找到符合条件(过滤)的前两个元素,为此我在kotlin中实现了以下代码:

val arr = 0 until 20

val res = arr.filter { i ->
        println("Filter: $i")
        i % 2 == 0
    }.take(2)
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我意识到它过滤整个列表,无论是否找到了这两个元素.

使用Java 8 stream api,它按预期工作.

val res2 = arr.toList().stream()
     .filter { i ->
          println("Filter: $i")
          i % 2 == 0
     }.limit(2)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如果只使用Kotlin功能就可以实现.

我知道我可以使用一个简单的for循环,但我想使用函数式编程方法.

java functional-programming java-8 kotlin java-stream

5
推荐指数
2
解决办法
642
查看次数