标签: mutablelist

在 Android 中需要列表的地方使用 Kotlin 的 MutableList 或 ArrayList

我正在尝试学习在 Android 中做事的“Kotlin 原生方式”,同时既不是 Kotlin、Java 也不是 Android 开发的专家。具体来说,何时使用ArrayListvsMutableList

在我看来,MutableList应该尽可能选择。然而,如果我查看 Android 示例,他们似乎总是选择ArrayList(就我目前发现的而言)。

下面是一个工作示例的片段,它使用ArrayList并扩展了 Java 的RecyclerView.Adapter.

class PersonListAdapter(private val list: ArrayList<Person>,
                        private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
Run Code Online (Sandbox Code Playgroud)

问题 1)

即使我是从 Android 的 Java 代码中借用的,我是否可以简单地将上述代码编写如下(注意MutableList<>而不是ArrayList<>)?

class PersonListAdapter(private val list: MutableList<Person>,
                        private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
Run Code Online (Sandbox Code Playgroud)

问题2)

总是使用MutableListover真的更好ArrayList吗?主要原因是什么?我上面提供的一些链接让我无法理解,但在我看来,这MutableList是一个更松散的实现,在未来更有能力改变和改进。那正确吗?

android arraylist kotlin mutablelist

7
推荐指数
2
解决办法
1万
查看次数

如何在 Kotlin 中交换 MutableList 中的元素?

我有一个包含从 api 提取的数据的列表。但是,我需要对此列表(movieList)进行更改。我需要将索引 0 处的元素与索引 1 处的元素交换。例如:

列表[0] = 电影A,
列表[1] = 电影B

然后

列表[0] = 电影B,
列表[1] = 电影A

我打算执行这些操作的类如下:

data class MovieListDto(
    val docs: List<Movie>,
    val limit: Int,
    val offset: Int,
    val page: Int,
    val pages: Int,
    val total: Int
)

fun MovieListDto.MovieListDtoToMovieList(): List<Movie> {
    val movieList = mutableListOf<Movie>()

    for (movie in docs) {
        if (movie._id == "5cd95395de30eff6ebccde5c" ||
            movie._id == "5cd95395de30eff6ebccde5b" ||
            movie._id == "5cd95395de30eff6ebccde5d"
        ) {
            movieList.add(movie)
        }
    }
    return movieList
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

list kotlin mutablelist

5
推荐指数
1
解决办法
4521
查看次数

使用 Kotlin 中不同线程的结果更新列表

我想用不同线程的结果更新列表。

mainFunction(): List<A> {
  var x: List<A> = listOf<A>()
  val job = ArrayList<Job>()
  val ans = mainScope.async {
            var i = 0
            for (j in (0..5)) {
                job.add(
                    launch {
                        val res = async {
                            func1()
                        }
                        x += res.await()
                    }
                )
            }
         job.joinAll()
        }
  ans.await()
  return x
}
fun func1(): List<A> {
 //Perform some operation to get list abc
 var abc: List<A> = listOf<A>()
 delay(1000)
 return abc
}
Run Code Online (Sandbox Code Playgroud)

列表“x”未正确更新。有时,它会附加“res”..有时则不会。有没有线程安全的方法来修改这样的列表?

新的实施:

mainFunction(): List<A> {
 var x: List<A> = listOf<A>()
 val …
Run Code Online (Sandbox Code Playgroud)

multithreading list thread-safety kotlin mutablelist

4
推荐指数
1
解决办法
2005
查看次数

在 kotlin 中对包含数字的字符串进行排序

我想对一些包含数字的字符串进行排序,但经过排序后,它变成了这样["s1", "s10", "s11", ... ,"s2", "s21", "s22"]。在我搜索后,我发现这个问题有同样的问题。但是在我的示例中,我有mutableList<myModel>,并且我必须将所有字符串放入myModel.title例如可变列表中并放入代码下:

   val sortData = reversedData.sortedBy {
          //pattern.matcher(it.title).matches()
             Collections.sort(it.title, object : Comparator<String> {
                override fun compare(o1: String, o2: String): Int {
                    return extractInt(o1) - extractInt(o2)
                }

                 fun extractInt(s: String): Int {
                     val num = s.replace("\\D".toRegex(), "")
                     // return 0 if no digits found
                     return if (num.isEmpty()) 0 else Integer.parseInt(num)
                 }
            })
        }
Run Code Online (Sandbox Code Playgroud)

我在.sortedBy和 中有错误Collections.sort(it.title),请帮我解决这个问题。

collections android kotlin mutablelist

3
推荐指数
2
解决办法
3629
查看次数

Kotlin .add覆盖MutableList中所有列表项

我有一个包含可变列表的对象

object TrackingEventsList {
    var EventDate: String = ""
    var EventDescription: String = ""
}

object Waybill {
    var WaybillNumber: String = ""
    var OriginHub: String = ""
    var TrackingEvents: MutableList<TrackingEventsList> = ArrayList()
}
Run Code Online (Sandbox Code Playgroud)

当我尝试添加Waybill.TrackingEvents时,所有先前的实例都被覆盖并复制添加的最后一个TrackingEvent.

private fun fillTracking(events: NodeList) {
    var list = TrackingEventsList
    for (x: Int in 0 until events.length) {
        var tName = (events.item(x) as Element).tagName
        var event = (events.item(x).firstChild as Text).wholeText
        if (tName == "EventDate") {
            list.EventDate = event
        }
        if (tName == "EventDescription") {
            list.EventDescription = …
Run Code Online (Sandbox Code Playgroud)

object kotlin mutablelist

2
推荐指数
2
解决办法
1225
查看次数

将 MutableList 包装在 LiveData 或 MutableLiveData 中

MutableList将 a 包装在LiveDataor中的建议方法是什么MutableLiveData,以便可以修改列表并观察它所发生的变化?

我在 Room 中有一些相当短的表(<20 个项目)(它缓存从服务器检索的值)。我想保留这些项目的可变子集;用作其他更大表的查询中的过滤器。我的想法是将 a 分配给我的应用程序中的模型类,并通过将此类包装在或 中MutableList来使其可观察。然后,通过更新这些选择中的项目,我可以触发大型表上的必要查询。MutableLiveDataLiveData

目前我的代码具有以下结构,我已在问题中将其精简为我认为相关的内容。最终我想keyset在更复杂的查询中使用多个。我的简化模型文件如下,

class Model(application : Application) : AndroidViewModel(application)
{
  val keys    : LiveData<List<Key>>
  val keyset  : LiveData<MutableList<Key>>
  val values  : LiveData<List<Value>>
  init {
    keys   = repository.keys
    values = repository.values
    keyset = mutableListOf<Key>() // I'm not entirely sure how to instantiate LiveData<MutableList<Key>>
  }
}
Run Code Online (Sandbox Code Playgroud)

它依赖于存储库,

class Repository(private val queryset : QuerySet)
{
   val keys   : LiveData<List<Key>>   = queryset.getKeys()
   val values : …
Run Code Online (Sandbox Code Playgroud)

kotlin android-livedata mutablelivedata mutablelist

2
推荐指数
1
解决办法
1万
查看次数

Kotlin 泛型中列表和可变列表的区别

我最近在研究 kotlin 泛型,但我发现了一些奇怪的情况

IDE镜像

interface MyItem

fun <ITEM : MyItem> bindItem(items: List<ITEM>?) {
    val castedItem = items as List<MyItem>?
}

fun <ITEM : MyItem> bindItem2(items: MutableList<ITEM>?) {
    val castedItem = items as MutableList<MyItem>?
}
Run Code Online (Sandbox Code Playgroud)

只有在 MutableList 情况下,编译器才会警告未经检查的 Cast

如果有人知道这种情况,请告诉我。

generics kotlin mutablelist

2
推荐指数
1
解决办法
90
查看次数

Kotlin,Android - 如何将 MutableLiveData&lt;MutableList&lt; Something &gt;&gt; 转换为 LiveData&lt;List&lt; Something &gt;&gt;

MutableLiveData<MutableList<object>>在我拥有并且想要创建的ViewModel 中LiveData<List<object>>,但我不知道如何ListMutableList.

这是我想做的:

class AppViewModel : ViewModel() {

    private val _tasks = MutableLiveData<MutableList<Task>>(mutableListOf())
    val tasks: LiveData<List<Task>> = _tasks
}
Run Code Online (Sandbox Code Playgroud)

(但我收到错误类型不匹配。必需:LiveData<List> 发现:MutableLiveData<MutableList>

当我将其更改val tasks: LiveData<List<Task>> = _tasksval tasks: LiveData<MutableList<Task>> = _tasks它时,它可以工作,但我希望List任务中的任务不可编辑

android list kotlin android-livedata mutablelist

2
推荐指数
1
解决办法
1282
查看次数

MutableList没有添加新值Kotlin

我从特定文件夹获取文件路径列表,但是当我尝试将其添加到我的可变列表中时,列表仍为空.

var filePath: MutableList<String>? = null
val path = File(getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).path, "BacFo Camera")
if (path.exists()) {
    for(i in path.list().iterator()){
        filePath?.add("" + path.toString() + "/" + i)  //here i=file name
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行Debugger之后,值确实存在变量,i但有些可变列表保持为空.我是Kotlin的新手,请帮助!!

android kotlin mutablelist

1
推荐指数
1
解决办法
421
查看次数

Scala 2.13用什么代替MutableList?

我正在将软件从Scala 2.12.8升级到Scala 2.13,并发现根据许多指南(如指南)已删除了MutableList集合(scala.collection.mutable.MutableList )。

例如,本指南说这是一个已弃用的集合,所以才删除了它,但是在以前的版本中我找不到该类的任何弃用。

“删除了不推荐使用的集合(MutableList,immutable.Stack等)”

我还首先升级到2.12.9(在2.13.0之前的最新版本),以检查是否有任何不推荐使用的注释,以提供有关使用什么的建议,但是在此版本中,该集合也没有被弃用。

我搜索了这个问题,但找不到很好的答案。这个问题对我和将来的升级都将是有益的。

在Scala 2.13中,我应该使用什么代替MutableList?

scala scala-collections mutablelist scala-2.13

1
推荐指数
1
解决办法
141
查看次数