我有一个对象Keyword,它存储一个String,其中包含关键字的文本和一组o关键字(Set<Keyword>
),我需要将其转换为String数组。有没有快速/简单的方法来执行此操作,或者我需要迭代集合并逐个添加每个关键字?
修改
对于那些要求关键字类的人:
@Entity
public class Keyword {
// ...
@Basic
private String value;
// ...
// Getters & Setters
}
答案 0 :(得分:3)
试试这个:
String[] arr = set.toArray(new String[set.size()]);
击> <击> 撞击>
如果你有一个Set<Object>
,......就是我所说的。
不,由于Set<Keyword>
和String[]
之间没有直接关系,因此无法将Keyword
直接转换为String
。你将不得不迭代集:
String[] arr = new String[set.size()];
int i = 0;
for (Keyword word : set)
arr[i++] = word.toString();
答案 1 :(得分:3)
实现Collection
intefrace(包括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();
}
答案 2 :(得分:3)
如果您使用Guava,则可以使用:
Lists.transform(Lists.newArrayList(theSet), Functions.usingToString())
.toArray(new String[theSet.size()])
这只是划伤了番石榴实际可以做的事情。
答案 3 :(得分:1)
没有具体的方法可以做到这一点。您可以使用set.toArray将Set转换为Object [],然后遍历数组 要么 直接迭代集合
答案 4 :(得分: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);