1

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

编辑:

对于那些要求关键字课程的人:

@Entity
public class Keyword {

    // ...

    @Basic
    private String value;

    // ...

    // Getters & Setters

}
4

5 回答 5

3

尝试这个:

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

...如果你有一个Set<Object>.


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

String[] arr = new String[set.size()];
int i = 0;
for (Keyword word : set)
    arr[i++] = word.toString();
于 2013-06-18T13:08:07.247 回答
3

每个实现Collectionintetrace (包括Set)的类都有toArray()方法:

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

如果集合使用其他类型进行参数化,例如,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();
}
于 2013-06-18T13:08:58.493 回答
3

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

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

而这仅仅触及了番石榴实际可以做的事情的表面。

于 2013-06-18T13:15:15.700 回答
1

There is no specific way to do this . You can either convert Set to Object[] using set.toArray and then iterate over the array or iterate over the set directly

于 2013-06-18T13:11:28.643 回答
1

您可能需要向toString()您的关键字类添加方法,如下所示。或者您可以使用单独的转换器类/方法。

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);
于 2013-06-18T16:45:07.097 回答