Kotlin映射函数返回一个流,不是collect()的Java等价物

Kotlin映射函数返回一个流,不是collect()的Java等价物,kotlin,java-stream,Kotlin,Java Stream,map返回一个流,而不是一个列表。因此分配product.media=cleanedMedia将不起作用。我必须在这里使用collect,才能让它正常工作。但是我经常看到人们说,map相当于Java的collect。(此处举例说明:) 使用纯Kotlin列表 在Product类中,确保删除import java.util.List以使用Kotlin的列表 class Product { var media: List<Media> = listOf() } 但是我经常看到人们说

map
返回一个流,而不是一个
列表
。因此分配
product.media=cleanedMedia
将不起作用。我必须在这里使用
collect
,才能让它正常工作。但是我经常看到人们说,
map
相当于Java的
collect
。(此处举例说明:)

使用纯Kotlin
列表
Product
类中,确保删除
import java.util.List
以使用Kotlin的列表

class Product {
  var media: List<Media> = listOf()
}
但是我经常看到人们说,
map
相当于Java的
collect

首先:kotlin有多个项目迭代方案:

  • 默认值:使用物化集合。例如,所有运算符返回最终集合,例如-
  • Kotlin序列:它们看起来像Java流,例如,它们返回惰性迭代器。请检查一下电话号码
  • 科特林合作项目也有。它是流式操作符,返回通量
因此: *Kotlin序列看起来像Java流,但是在编译过程中字节码被烹调。所以形式上的实现是不同的。
*在大多数情况下,它更快、更简单,因此最好使用它。

我看不到任何类似的东西

map相当于collect for Java

在链接页面中。唯一提到的
collect

这样做的一个好处是,不需要从集合到流的初始转换,也不需要从流到集合的最终转换–使用collect()调用

map()
只是一个例子;它同样可以是
过滤器
平面图
,以及其中的一些序列,等等


所以它说
stream()
collect(Collectors.toList())
都可以被抛出(但只能一起抛出!),并且可能需要重命名某些方法

你能告诉我你到底是什么意思吗。当我省略
stream
时,语法从这句话中变为红色,我假设您有一个
java.util.List
,而不是一个Kotlin
List
。将java列表转换为kotlin列表,它就会工作。如何转换?它来自java库?
class Product {
  var media: List<Media> = listOf()
}
fun cleanup(product: Product) {
  product.media = product.media.filter { "failed" == it.purpose }
}