我想解决问题,
我已经完成了这段代码,并获得了输出
found : Unit
[error] required: Boolean
[error] for (data <- category(i)) {
我必须返回:(List[String], (List[String], (List[String])
我选择使用filter方法来实现紧凑的代码。 我不明白为什么它不起作用。为什么代码不返回布尔值而是单位。
如果列表中至少有1个元素以x开头,我希望此方法返回true,否则该方法必须返回false。
谢谢
def classifiedColumns(columnNames: List[String]): (List[Column], List[Column], List[Column]) = {
val category = List(
List("t01", "t03", "t11", "t1801", "t1803"), // 1
List("t05", "t1805"), // 2
List("t02", "t04", "t06", "t07", "t08", "t09", "t10", "t12", "t13", "t14", "t15", "t16", "t18")) // 3
def get_info(x: String, i: Int, category: List[List[String]]): Boolean = {
for (data <- category(i)) {
if (data.startsWith(x)) true
else false
}
}
(columnNames.filter(x => get_info(x, 1, category)).map(column),
columnNames.filter(x => get_info(x, 2, category)).map(column),
columnNames.filter(x => get_info(x, 3, category)).map(column))
}
classifiedColumns(List("t0201", "t0408", "t0600084"))
答案 0 :(得分:2)
您使用for
的行为与预期不符。您正在使用这种理解:
for (data <- category(i)) {
if (data.startsWith(x)) true
else false
}
此表达式“减法”为(即简写):
category(i).foreach(data => {
if (data.startsWith(x)) true
else false
})
foreach
返回Unit
,因此此表达式的类型(以及从您的get_info
方法返回的类型,这是方法的主体)为Unit
。
目前尚不清楚您希望在这里返回什么,我假设您要让方法返回true
,如果category(i)
中元素的 any 以{{ 1}}。如果是这样,您可以按以下步骤实现它:
x
按预期返回哪个category(i).exists(_.startsWith(x))
。