2013-06-18 68 views
1

我有一个对象关键字,用于存储字符串和关键字文本以及一组需要转换为字符串数组的关键字集合(Set<Keyword>)。有没有快速/简单的方法来做到这一点,或者我需要迭代集合并逐个添加每个关键字?将字符串<Keyword>转换为字符串[]

编辑:

对于那些要求class关键字:

@Entity 
public class Keyword { 

    // ... 

    @Basic 
    private String value; 

    // ... 

    // Getters & Setters 

} 
+0

因此,该对象实际上是指一个字符串?对象o =“你好”? – arynaq

+0

你可以添加更多的来源?我不明白你在开场提供的描述。 – tbsalling

+0

什么是“关键字”?你可以上课吗? – Bohemian

回答

3

实现Collection intefrace(这包括Set)具有toArray()方法每类:

​​

在一组的情况下被参数化与其他类型,例如Set<Keyword>你会做这样的事情:

Keyword[] array= set.toArray(new Keyword[0]); 
String[] stringArray= new String[array.length]; 

for (int i=0; i<array.length; i++) { 
    stringArray[i]= array[i].getThatString(); 
} 
+0

该操作提到了一个'Set '而不是'Set '这恰好包含了字符串。 – assylias

+1

哦,我读了标题... – darijan

+0

是的,标题不正确。对不起。并感谢你的答案。这正是我的想法。 –

3

试试这个:

String[] arr = set.toArray(new String[set.size()]); 

...是那么我有什么说,如果你有一个Set<Object>


没有,没有办法直接在Set<Keyword>转换为String[]因为有KeywordString之间没有直接的关系。你将不得不遍历集合:

String[] arr = new String[set.size()]; 
int i = 0; 
for (Keyword word : set) 
    arr[i++] = word.toString(); 
+0

这是一个'设置',而不是'设置'... – assylias

+1

@assylias糟糕,我认为这是一个'集'。 – arshajii

+0

这就是我的想法。谢谢你的答案。 –

1

没有做到这一点的具体方式。您可以设置转换使用set.toArray为Object [],然后遍历数组 或 遍历集合直接

3

如果使用Guava,你可以使用这个在:

Lists.transform(Lists.newArrayList(theSet), Functions.usingToString()) 
    .toArray(new String[theSet.size()]) 

这只是刮伤了番石榴实际上可以做的表面。

+0

upvote,OP应该给番石榴一试,它有很多好东西。 –

+0

不幸的是,我没有使用番石榴,但我会考虑未来的项目(也许这是一个)。感谢您的回答。 –

+1

@DavidMorenoGarcía(个人意见,心灵)你应该严格考虑使用它。正如我在评论中提到的那样,它只能做一件事。请参阅[这里](http://docs.guava-libraries.googlecode.com/git/javadoc/index.html)了解完整的API。请注意,它具有_real_不可变集合,_real_ IP地址验证等等。真。 – fge

1

您可能需要将toString()方法添加到您的Keyword类中,如下所示。或者你可以使用一个单独的变压器类/方法。

class Keyword { 
    private String value; 

    Keyword(String v) { 
     this.value = v; 
    } 

    public String toString() { 
     return value; 
    } 
} 

我会说迭代设置并逐个添加每个关键字是您的最佳策略。

System.out.println(toStringArray(set)); 

private static String[] toStringArray(Collection<?> set) { 
    String[] arr = null; 
    if (set != null) { 
     arr = new String[set.size()]; 
     int i = 0; 
     for (Object o : set) { 
      arr[i++] = o.toString(); 
     } 
    } 
    return arr; 
} 

但是,如果您真的想要,您可以有一个肮脏的解决方法如下所示。这里唯一的问题是,您的关键字值不能包含逗号(,),因为它被split()方法使用。

String str = set.toString(); 
str = str.substring(1, str.length() - 1); 
String[] asStringArray = str.split(","); 
System.out.println(asStringArray);