首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ListBuffer获取list的元素

如何使用ListBuffer获取list的元素
EN

Stack Overflow用户
提问于 2019-12-09 21:18:10
回答 2查看 70关注 0票数 0

我在获取列表的元素时遇到了一个非常奇怪的问题

下面是我将参数作为"bc“和"mn”传递的代码片段。

代码语言:javascript
运行
复制
val list1 = List("abc", "def", "mnp")
    val list2 = List(args(0), args(1))
    val header1=list1.filter(x => list2.exists(y => x.contains(y)))
    println(header1)

Output-List("abc","mnp")

我正在尝试一种不同的方法(通过传递相同的参数),但得到了一个空列表

代码语言:javascript
运行
复制
val list1 = List("abc", "def", "mnp")
    //val list2 = List(args(0), args(1))
    val ipList1= new ListBuffer[Any]
    for(i <- 0 to 1){
      ipList1 +=args(i)
    }
    val list2=ipList1.toList
    println(list2)
    val header1=list1.filter(x => list2.exists(y => x.contains(y)))
    println(header1)

输出列表(bc,mn)

List ()-->这是我得到的空列表

有没有人能告诉我哪里做错了,怎么改正?

EN

回答 2

Stack Overflow用户

发布于 2019-12-09 22:11:55

问题是x.contains(y)并不是你想的那样。String有一个contains方法来检查另一个String是否是这个String的子字符串。但是在您的代码中,y没有String类型,而是Any类型。因此不会调用Stringcontains方法。这是WrappedStringcontains方法,它将String x视为Seq[Char]。该方法不检查是否有任何子字符串等于y,而是检查是否有任何字符等于y

显然,解决方案是使用ListBuffer[String]

票数 3
EN

Stack Overflow用户

发布于 2019-12-09 21:25:55

问题是您使用的是ListBufferAny,因此元素丢失了从StringAny的类型信息,显然这改变了代码的语义。

您可以这样做:

代码语言:javascript
运行
复制
val ipList1 = new ListBuffer[String]
for (i <- 0 to 1) {
  ipList1 += args(i).toString
}
val list2 = ipList1.toList

或者更好的是:

代码语言:javascript
运行
复制
val list2 = args.slice(0, 2).toList
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59249758

复制
相关文章

相似问题

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