如何通过kotlin调用java使用MutableList删除?
我有一个带有Int的generic的可变列表,就像可变列表一样。 我想知道如何正确使用kotlin调用java方法remove(int-position)和remove(Integer-object)如何通过kotlin调用java使用MutableList删除?,java,kotlin,Java,Kotlin,我有一个带有Int的generic的可变列表,就像可变列表一样。 我想知道如何正确使用kotlin调用java方法remove(int-position)和remove(Integer-object) public void remove(int position) { if (this.list != null && this.list.size() > position) { this.list.remove(position);
public void remove(int position) {
if (this.list != null && this.list.size() > position) {
this.list.remove(position);
notifyDataSetChanged();
}
}
public void remove(T t) {
if (t != null && this.list != null && !this.list.isEmpty()) {
boolean removed = false;
try {
removed = this.list.remove(t);
} catch (Exception e) {
e.printStackTrace();
}
if (removed) {
notifyDataSetChanged();
}
}
}
自Kotlin 1.2.30起,共有4种方法可用于移除项目:
-用于删除元素一次。对该方法的调用被编译为对Java方法的调用删除
List.remove(Object o)
-用于在特定位置移除。对该方法的调用被编译为对Java方法removeAt
的调用List.remove(int index)
-用于多次删除集合中的每个元素removeAll
-使用谓词多次删除每个元素removeIf
fun main(args: Array<String>) {
val l: MutableList<Int> = mutableListOf<Int>(1, 2, 3, 3, 4, 5, 6, 7, 1, 1, 1)
println(l.remove(1)) // true
println(l) // [2, 3, 3, 4, 5, 6, 7, 1, 1, 1] - removes first element and stops
println(l.removeAt(0)) // 2 - removes exactly on a specific position
println(l) // [3, 3, 4, 5, 6, 7, 1, 1, 1]
try {
println(l.removeAt(10000))
} catch(e: IndexOutOfBoundsException) {
println(e) // java.lang.IndexOutOfBoundsException: Index: 10000, Size: 9
}
println(l.removeAll(listOf(3, 4, 5))) // true
println(l) // [6, 7, 1, 1, 1] - removes elements in list multiple times, 3 removed multiple times
println(l.removeIf { it == 1 }) // true
println(l) // [6, 7] - all ones removed
}
以下代码用于kotlin中的mutablelistof
var stringlist= mutableListOf<String>() // hear pass your object type also
stringlist.add("Hello")
stringlist.add("ajay")
stringlist.add("How")
stringlist.add("are")
stringlist.remove("ajay") // if your list containg object data then pass object.
for (data in stringlist){
Log.d("Value::",data)
}
var stringlist=mutableListOf()//同时传递对象类型
stringlist.add(“Hello”)
stringlist.add(“ajay”)
stringlist.add(“如何”)
stringlist.add(“are”)
stringlist.remove(“ajay”)//如果列表包含对象数据,则传递对象。
用于(字符串列表中的数据){
Log.d(“值::”,数据)
}
似乎其他答案只给出了删除(int位置)
的备选方案,但它们没有直接回答问题(根据编辑)
因此,您可以使用以下代码:
val list = mutableListOf("ah!", "I", "died!")
(list as java.util.List<String>).remove(1)
println(list)
就这样!您已成功地从Java调用了remove(int位置)
。这会引起一些警告,请忽略它们
我终于自己找到了答案。Kotlin将包装泛型 如果将变量声明为int?,则int为整数,因为只有一个对象可以为null。您可以使用android studio中的工具,该工具可以显示kotlin字节码来查找该值 如果我们调用java方法,如问题图像:
val a:Int = 0
remove(a) // will call java method remove(int position)
val a:Int? = 0
remove(a) // will call java method remove(T t) to remove object
结果不一样!如果您有更好的选择,我们应该避免这样使用。很明显,这些操作都包含在文档中。很抱歉,这个问题不清楚!我的意思是调用java列表方法remove,它具有相同的名称。谢谢您的回答。kotlin调用java方法怎么样?在java中,只有名为remove()的相同方法,其含义不清楚。不像kotlin使用方法removeAt移除位置中的元素,或者使用方法remove移除对象。在没有kotlin的java中,我们可以使用Int和Integer来区分同名方法的含义。kotlin将
remove(Int)
方法重命名为removeAt
,以避免混淆。Kotlin代码中对removeAt
的调用被编译为对remove(int)
方法的调用。@yole感谢您的澄清。我也不知道removeAt
会被编译成remove(int)
。也非常感谢您在回答中编辑并澄清了这一点。列表项的类型是Int,而可变列表是用java定义的呢?就像新的ArrayList()一样,我不这么认为。@gekson和ArrayList不会有冲突list.remove(3)
将调用remove(int-index)
而list.remove(new Integer(3))
将调用remove(Object element)
。是的,我们可以使用list.remove(3 as int?
来框选这个整数。
[ah!, died!]
val a:Int = 0
remove(a) // will call java method remove(int position)
val a:Int? = 0
remove(a) // will call java method remove(T t) to remove object