首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤数组列表

过滤数组列表
EN

Stack Overflow用户
提问于 2022-05-13 09:35:51
回答 1查看 221关注 0票数 0

我有一个类,我想使用它,根据驱动程序过滤我的数组。驱动程序是硬编码的,只是为了消除代码不能工作的可能性。我尝试过许多不同的方法,但似乎没有一种方法奏效。我得到错误的IndexOutOfBoundsException: Index: 1, Size: 0后,我的行println(driverList[3].DELNO)

代码语言:javascript
运行
复制
   private fun datafilter(tripsheetlist: ArrayList<DataModel>, driver: String): List<DataModel> {
   println("driver in datafilter subclass")
   println(driver)
   
   println("tripsheetlist[3].DELNO")
   println(tripsheetlist[3].DELNO)
   
   var driverList: List<DataModel> = tripsheetlist

   //   var driverList : ArrayList<DataModel> = tripsheetlist.filter { s -> s == driver }
   var i = 0
   while (  i != tripsheetlist.size){
        driverList = tripsheetlist.takeWhile { tripsheetlist[i].DRIVER == "JIM" }
       i++
   }
 
   println("driverList[3].DELNO")
   println(driverList[3].DELNO)

       return driverList
   }

下面是DataModel

代码语言:javascript
运行
复制
class DataModel(
   var TRIPSHEETNO: Int,
   var WONUMBER: String,
   var DELNO: Int,
   var CUSTOMER: String,
   var DRIVER: String,
   var WEIGHT: Double,
   var state: DataState = DataState.Unselected
   )

在过滤器之后,我看到它作为一个List而不是ArrayList返回。我已确定这不影响我的数据。

谢谢你的建议。

解决办法:

代码语言:javascript
运行
复制
private fun datafilter(tripsheetlist: ArrayList<DataModel>, driver: String): ArrayList<DataModel> {
   return ArrayList(tripsheetlist.filter { it.DRIVER == driver }) }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-13 10:23:48

IndexOutOfBoundsException: Index: 1 Size: 0可能来自println(driverList[3].DELNO)行,当您试图访问在list中不可用的index时,在list上使用了takeWhile

这里

代码语言:javascript
运行
复制
tripsheetlist.takeWhile { tripsheetlist[i].DRIVER == "JIM" }

takeWhile中,您比较了只有第一项的DRIVER,因此当第一项的DRIVER不是JIM时,它将返回emptyList,或者当第一项的DRIVER值为JIM时返回完整列表。

您不应该在用例中使用takeWhile,因为它只会在列表的开头返回与给定条件匹配的项。因此,如果您的第一个项的DRIVER不是JIM,它将返回一个emptyList,如果您的前两个项的DRIVERJIM,它将只返回这两个项,并且不会检查其余的项。

您应该使用filter,您的方法可以像这样进行重构

代码语言:javascript
运行
复制
private fun datafilter(tripsheetlist: ArrayList<DataModel>, driver: String): List<DataModel> {
    return tripsheetlist.filter { it.DRIVER == driver }
}

,在过滤器之后,我看到它作为列表返回,而不是ArrayList

filtertakeWhile返回一个list,所以如果您想要一个ArrayList。你必须像这样把它演成ArrayList

代码语言:javascript
运行
复制
ArrayList(tripsheetlist)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72227417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档