2016-03-12 2 views
2

Мне нужно разбить все значения из таблицы по отношению к пробелу и, наконец, добавить их в список/собрание.Скала разбивает укус перед добавлением его в отсортированный набор

Мой код

val keywords = scala.collection.mutable.SortedSet[String]() 
val connection = DriverManager.getConnection("jdbc:postgresql:<Conn Details>", "<DBNAME>", "<PASSWD>") 
val rs = connection.createStatement() 
val res = rs.executeQuery("select nom from ip.interest_points where in_use = cast(1 as bit)") 
while (res.next) { 
    keywords += res.getString("nom") 
} 
print (keywords) 

Возвращает

TreeSet(AOC Les Halles, Adele - Réseau Art Contemporain Lyon 
Métropole, Amphithéâtre des Trois Gaules, Ancien Hôpital de 
l'Antiquaille, Ancienne Gare des Brotteaux...) 

Я хочу, чтобы разделить значения от «НОМ» с последующим добавлением его к ключевым словам отсортированного набора.

keywords += res.getString("nom").split(" ") 

Выше кода - это то, что я пробовал, и это не сработало.

Ожидаемый выход

TreeSet(AOC,Les,Halles, Adele,-,Réseau,Art,Contemporain,Lyon...) 

Edit:

keywords += res.getString("nom").split(" ").toString 

gives ([Ljava.lang.String;@ff5b51f ....) 
+0

Что тип 'keywords' и что тип' res.getString ("НОМ") раскол (»«) '? –

+0

Я получаю ошибку времени компиляции –

ответ

2

String.split() возвращает Array. Вы не можете += a SortedSet и массив. Создайте новый SortedSet со всеми значениями первого, а затем добавьте два набора. Что-то вроде этого:

while (res.next) { 
    val names = scala.collection.mutable.SortedSet[String]() 
    val interestPoints = res.getString("nom").split(" ") 
    for (interestPoint <- interestPoints){ 
    names += interestPoint 
    } 
    keywords = keywords ++ names 
} 

Или что-то вроде этого:

while (res.next) { 
    val interestPoints = res.getString("nom").split(" ") 
    keywords ++= interestPoints 
} 

+, как правило, для добавления одного элемента в коллекции и ++, как правило, для объединения двух коллекций.

Если вы используете неизменные коллекции, я знаю, что ArrayOps имеет метод toSet, который преобразуется в неизменяемый набор.

+0

Позвольте мне попробовать это. Спасибо за ответ –

+0

Я не уверен на 100% в синтаксисе изменчивых коллекций, так как я обычно использую неизменяемые, но он должен работать. –

1

Ваша проблема в том, что вы пытаетесь написать Java-код в scala. :)

Я думаю, что если вы попытаетесь остаться идиоматичным и воспользуетесь родными чертами языка, который вы используете, вы обнаружите, что многие вещи, которые кажутся утомительными и трудными, становятся простыми и элегантный.

Что-то вроде этого, может быть:.

new Iterator[String] { 
    def hasNext = res.next 
    def next = res.getString("nom") 
} 
.flatMap(_.split(" ")) 
.to[SortedSet] 
Смежные вопросы