如何通过kotlin调用java使用MutableList删除?

如何通过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);

我有一个带有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);
        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)
  • removeAt
    -用于在特定位置移除。对该方法的调用被编译为对Java方法
    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