Tag: 集合

Kotlin:暴露API中的不可变列表

我是Kotlin的新手,并且正在解决返回不可变内部可变列表版本的问题。 我回顾了下面的' Kotlin:通过转换修改(不可变的)列表,是否合法? '并理解不可变列表实际上只是只读的视图,不公开修改方法。 我想要一个暴露“不可变”列表的类,并且仍然想要利用Kotlins自动获取器(不必提供获取列表或列表成员的所有样板) 下面是一个坏主意(或者它会导致在将来的版本中可能被阻止的问题) class Foo { val names: List<String> = LinkedList; fun addName(name: String) { (names as LinkedList).add(name) } } 我正在寻找允许(例如): val foo = Foo; println(foo.names.size) 但仍然阻止调用者修改类的内部(至少尽可能)。 例如删除元素或清除后备列表。

什么是Java Stream.collect的Kotlin等价物?

如果我想将我的Kotlin集合收集到stdlib中没有构建的东西中,我该怎么做?

Kotlin多标准排序不编译

这个简单的场景 data class Person(var name:String, var age:Int) var people = listOf( Person("Adam", 36), Person("Boris", 18), Person("Claire", 36), Person("Adam", 20), Person("Jack", 20) ) println(people.sortedBy{compareBy{Person::age, Person::name}}) 不用编译 错误:(27,29)Kotlin:类型推断失败:没有足够的信息推断inline> fun compareBy(crossinline selector:(T) – > Comparable <*>?)比较器请明确指定它。 将其更改为 println(people.sortedBy{compareBy<Person>{Person::age, Person::name}}) 不工作,也没有工作 println(people.sortedBy{compareBy<Person>{Person::age}.thenBy { Person::name }}) 给 错误:(28,20)Kotlin:内联fun类型参数绑定到R> Iterable.sortedBy(十字交叉选择符:(T) – > R?):不满足列表:推测类型Comparator不是Comparable> 那么我也尝试了多功能重载 println(people.sortedBy{compareBy<Person>({it.age}, {it.name})}) 这就产生了 错误:(28,20)Kotlin:内联fun类型参数绑定到R> Iterable.sortedBy(十字交叉选择符:(T) – > […]

Kotlin:收藏定义的差异

在这之间Kotlin有什么不同之处: val customerProducts = mutableMapOf<Customer, Set<Product>>() 和这个: val customerProducts: MutableMap<Customer, Set<Product>> = mutableMapOf()

什么Java 8 Stream.collect等价物在标准Kotlin库中可用?

在Java 8中,有Stream.collect ,它允许在集合上进行聚合。 在Kotlin中,这不是以同样的方式存在,除了可能作为stdlib中扩展函数的集合。 但是不清楚不同用例的等价关系是什么。 例如, JavaDoc for Collectors的顶部是为Java 8编写的示例,将它们移植到Kolin时,不能在不同的JDK版本上使用Java 8类,因此可能应该使用不同的方式编写。 就在线资源展示Kotlin集合的例子而言,它们通常是微不足道的,并没有真正与相同的用例相比较。 什么是真正符合Java 8 Stream.collect记录的案例的好例子? 这里的列表是: 将名字积累到列表中 将名称累加到TreeSet中 将元素转换为字符串并连接它们,用逗号分隔 计算员工的工资总额 按部门分组员工 按部门计算工资总额 将学生划分为通过和失败 上面链接了JavaDoc中的细节。 注意: 这个问题是由作者故意写的和回答的( 自我回答的问题 ),所以对于常见的Kotlin话题的习惯性的回答是在SO中。 此外,为了澄清一些真正的古老的答案写为科特林的阿尔法,是不是今天的Kotlin准确。