Данные Scala ListBuffer недоступны

У меня есть следующий код:

 val lines =  Source.fromFile("/home/cloudera/file_01").getLines().drop(1).toVector

Я получаю вектор строк файла - который является файлом:

lines: Vector[String] = Vector(blk1|20170912|||||, ||||||, |c1|c2|c3|||, |201710|201711|201712|||, v1|1|4|9|||, v2|1||7|||, blk2||||||, ||||||, c4|c5|c6||||, |201710|201711|201712|||, h|h|h|h|h|h|h, j|j|j|j|j|j|j, k|k|k|k|k|k|k, m|m|m|m|m|m|m, ||||||, ||||||, ||||||, 201801|1|5||||, 201802|9|100||||, 201803|9|||||)

Затем я хочу взять каждую запись, являющуюся массивом строк, а затем поместить ее в массив строк.

Я получаю, что хорошо

scala> val current_line_values_1 = lines(3).split("\\|", -1).map{x => val trimmed = x.trim; if (trimmed.isEmpty) "empty string" else trimmed}
current_line_values_1: Array[String] = Array(empty string, 201710, 201711, 201712, empty string, empty string, empty string)

scala> val current_line_values_2 = lines(3).split("\\|", -1).map{x => val trimmed = x.trim; if (trimmed.isEmpty) "empty string" else trimmed}
current_line_values_2: Array[String] = Array(empty string, 201710, 201711, 201712, empty string, empty string, empty string)

Сделано так для простоты в SBT Console.

Итак, я посмотрел на ListBuffer, потому что я хочу создать список из этих 2, которые являются подмножеством всех строк.

Я сделал согласно mutable.ListBuffer, используя пример Элвина Александра следующее:

var fruits = new ListBuffer[String]()
//var fruits = new ListBuffer[Array[String]]()  - this made no difference either

fruits += current_line_values_1.toString
fruits += current_line_values_2.toString

Мне пришлось использовать toString, чтобы получить его для компиляции.

Я получаю правильное количество элементов, но распечатываю так:

      saveLinesList1 = fruits.toList

      // How to print 2 dimensional?
      for (j <- 0 to (saveLinesList1.length - 1)) {

        println("hello " + saveLinesList1(j))
        val x = saveLinesList1(j)
           for (k <- 0 to (x.length - 1)) {
             println("hello 2 " + x(k))
           }

      } // End of for loop.

дает мне:

hello [Ljava.lang.String;@51dd09f
hello 2 [
hello 2 L
hello 2 j
hello 2 a
hello 2 v
hello 2 a

Что случилось с контентом? Array of Array[String] тоже не помог. Просмотр двухмерного массива также не прояснил ситуацию.

Все, что мне нужно, это массив строк, которые являются массивом String.

1 ответ

Решение

Когда вы подаете заявку toString для Array он вернет объект назад, а не String значение. Вместо этого попробуйте использовать mkString который объединяет каждое значение в массиве и возвращает один String значение. Попробуйте использовать приведенный ниже код,

//no need to define it as var its already mutable
val fruits = new ListBuffer[String]()
fruits += current_line_values_1.mkString
fruits += current_line_values_2.mkString
//to print the ListBuffer
fruits.foreach(println(_))

Если тебе надо Array[String] вместо String Вы можете использовать следующие,

val fruits = new ListBuffer[Array[String]]()
fruits += current_line_values_1
fruits += current_line_values_2
Другие вопросы по тегам