var arrayone: ArrayList<String> = arrayListOf("a","b","c")
val arraytwo:ArrayList<String> = arrayListOf(arrayone.removeAt(0))
for (item in arraytwo) {
println(item)
}
我只想从第一个数组中删除项目并创建一个新数组,但这只会打印索引0处的一个项目。
removeAt(0)
从第一个列表中删除第一个元素并将其返回。arrayListOf
然后使用已删除的项创建一个新的(第二个)列表。
arrayone
现在包含:b
和c
。 arraytwo
现在包含a
。
如果您不想触及第一个列表,而且只想将剩余的项添加到新列表中,则可以使用drop
,例如:
var arrayone: ArrayList<String> = arrayListOf("a","b","c")
val arraytwo = arrayone.drop(1)
for (item in arraytwo) {
println(item) // now prints all except the first one...
}
// arrayone contains: a, b, c
// arraytwo contains: b, c
dropLast(1)
,如果您只想删除最后一项。或者使用dropWhile
/dropLastWhile
,如果您有一个条件要应用并且删除所有直到/到该条件为止...removeAt
,例如:val arraytwo = arrayone.toMutableList().apply {
removeAt(0)
}
// or without the apply:
arraytwo.removeAt(0)
或者您可以使用filterIndexed
来解决这个问题:
val arraytwo = arrayone.filterIndexed { index, _ ->
index != 1 // you can also specify more interesting filters here...
} // filter, map, etc. all return you a new list. If that list must be mutable again, just add a .toMutableList() at the end
filterIndexed
、filter
、drop
等方法,您可以确保第一个列表保持不变。如果您一开始就不想触碰第一个列表,您可能更想使用listOf
或toList
,即只需一个List
类型,它不会暴露可变函数(还请参阅Kotlin reference regarding Collections: List, Set, Map)。filter
/filterNot
感兴趣,然后很快就会涉及到minus
或类似的函数来删除无索引的不需要的项目。filterIndexed
的方法,这也可能适合你... - Roland
abstract fun removeAt(index: Int): E (source)
从列表中指定索引处移除一个元素。
返回已被移除的元素。
kotlin.stdlib / kotlin.collections.MutableList.removeAt
您正在创建一个新列表,其中只包含一个元素,即您已删除的元素。
请尝试:
val arraytwo = ArrayList(arrayone) // Copy the list
arraytwo.removeAt(0)
arrayone.removeAt(0)
即可。
您还可以使用apply
:
val arraytwo = ArrayList(arrayone).apply { removeAt(0) }
drop
(用于删除开头的项目)或 dropLast
,但据我所知,没有集合扩展可以在可迭代对象的中间删除一个项目(根据您的评论,您似乎需要这个功能)。这是有道理的,因为可迭代对象没有大小或索引的概念。对于普通的ArrayList:
val arrList = arrayListOf("account", "bec", "csw", "account")
arrList.removeAll { it == "account" }
对于自定义 ArrayList:
arrList.removeAll { it.key == "account" }
.filterTo(destination, predicate)
方法。对于您的例子,可以像这样实现:val arrayone = arrayListOf<String>("a", "b", "c")
val arraytwo = arrayListOf<String>()
arrayone.filterTo(arraytwo, { it != "a" })
println(arrayone) //[a, b, c]
println(arraytwo) //[b, c]
试一下这个,
var arrayone: ArrayList<String> = arrayListOf("a","b","c")
arrayone.removeAt(0)
val arraytwo:ArrayList<String> = arrayListOf(arrayone)
for (item in arraytwo) {
println(item)
}
from import java.utils.ArrayList
ArrayList<YourCustomObject>.removeIf{yourCustomObject ->
yourCustomObject.Id == IdToRemove
}
val x = arrayListOf(1, 2, 3, 5)
x.removeFirst()
println(x)
val y = x.filterIndexed { index, value -> index != 0 }
println(y)
[2, 3, 5]
[3, 5]
GL
arrayone.subList(1)
代替arrayListOf(arrayone.removeAt(0))
。 - TimremoveAt
返回被移除的元素。你正在创建一个只包含被移除元素的新列表。 - Salem