2014-01-16 2 views
-2

Я сделал это:Как преобразовать строку [] в набор?

Set<String> mySet = new TreeSet<String>(); 
String list = ("word,another,word2"); // actually this is much bigger 
String[] wordArr = list.split(","); 
mySet.addAll(wordArr); 

Это дает ошибку:

The method addAll(Collection<? extends String>) in the type Set<String> is 
not applicable for the arguments (String[]) 

Я думаю, что мои намерения ясны.

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

+4

Отъезд 'Arrays.asList' –

+0

@SotiriosDelimanolis A -1? приходите на человека, вы могли бы просто дать свой комментарий в качестве ответа! По крайней мере, это поможет. – kBisla

+3

Я не спускал вниз, но есть множество других ресурсов здесь и вокруг Интернета, которые дали бы вам ответ. –

ответ

4

TreeSet конструктор принимает Collection, A String[] может быть преобразован в List, который реализует Collection использованием Arrays.asList().

public static void main(String[] args) { 

    String list = "word,another,word2"; //No need for() here 
    String[] wordArr = list.split(","); 
    Set<String> mySet = new TreeSet<String>(Arrays.asList(wordArr)); 

    for(String s:mySet){ 
     System.out.println(s); 
    } 

} 
+1

Вам даже не нужно 'addAll'. Конструкторы set будут принимать коллекцию, поэтому вы можете использовать 'Set mySet = new TreeSet <> (Arrays.asList (wordArr));'. –

+0

@JoshuaTaylor Спасибо за предложение. Я обновил ответ. –

+0

Это не просто «TreeSet», но имеет такой конструктор. В коллекциях обычно есть конструкторы, которые принимают коллекции. Например, в документации для [AbstractCollection] (http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html) есть заметка: «Программист должен обычно предоставлять пустоту (нет аргументов) и конструктор Collection, в соответствии с рекомендацией в спецификации интерфейса Collection. " –

1

Вот пример использования Guava:

package com.sandbox; 


import com.google.common.collect.Sets; 

import java.util.Set; 

public class Sandbox { 

    public static void main(String[] args) { 
     String list = ("word,another,word2"); // actually this is much bigger 
     String[] wordArr = list.split(","); 
     Set<String> mySet = Sets.newHashSet(wordArr); 
    }   
} 

Если вы хотите сделать это без Arrays (я не рекомендую, но вы в классе, так, может быть, вы не можете использовать его):

package com.sandbox; 


import java.util.Set; 
import java.util.TreeSet; 

public class Sandbox { 

    public static void main(String[] args) { 
     Set<String> mySet = new TreeSet<String>(); 
     String list = ("word,another,word2"); // actually this is much bigger 
     String[] wordArr = list.split(","); 
     for (String s : wordArr) { 
      mySet.add(s); 
     } 
    } 


} 
+0

Нет, пожалуйста, google.commons.Мой профессор не может этого допускать. – kBisla

+0

@BrianRoach Ну, я не думаю, что добавлю это, если захочу буквально написать этот код. Но для достаточно большого проекта я, вероятно, уже имею его в своем классе. –

+1

Зачем использовать гигантскую стороннюю зависимость: 'new TreeSet (Array.asList (wordArr));' (случайно удалил это вместо редактирования) –

Смежные вопросы