我在List<String>
中有一个for
,可以在每次迭代时更改其数据。我想返回一个ArrayList
,其中包含存储在列表wordForms
中的所有数据。
List<String> wordForms = new ArrayList();
List<Synset> synsetsNoun = wordnet.getNounSynsetsOf(category);
for (Synset synset : synsetsNoun) {
wordForms = WordNetSynset.getWordFormsOf(synset);
System.out.println("\ts: " + wordForms);
}
在第一次迭代中,wordForm
有5个元素,第二次迭代有3个元素,依此类推。
我想使用所有元素返回ArrayList
,我该怎么做?
作为一个例子,假设我得到ArrayList<String>
喜欢
Element1
Element2
在第一次迭代中,然后
Element3
Element4
Element5
在第二次迭代中,依此类推。
然后,所需的输出将是包含所有这些元素的ArrayList<String>
:
Element1
Element2
Element3
Element4
Element5
答案 0 :(得分:1)
尝试:
List<String> wordForms = new ArrayList();
List<Synset> synsetsNoun = wordnet.getNounSynsetsOf(category);
for (Synset synset : synsetsNoun) {
wordForms.add(WordNetSynset.getWordFormsOf(synset));
}
System.out.println("\ts: " + wordForms);
这假设您的getWordFormsOf(...)
方法返回一个String对象。如果是这样,这段代码将把String添加到您的ArrayList中。
另一方面,如果您的getWordFormsOf
方法返回可能使用的String对象列表:
for (Synset synset : synsetsNoun) {
wordForms.addAll(WordNetSynset.getWordFormsOf(synset));
}
答案 1 :(得分:1)
目前,重新分配您的wordForms
变量每次迭代。
而不是你需要添加每次迭代的元素。您可以使用ArrayList#add
(documentation)方法执行此操作。
但是目前您要提取元素集来添加(ArrayList<String>
)。您现在可以迭代所有这些元素并将它们单独添加到wordForms
或使用指定的方法ArrayList#addAll
(documentation),它在幕后也是如此。
for (Synset synset : synsetsNoun) {
// Fetch the elements to add
ArrayList<String> elementsToAdd = WordNetSynset.getWordFormsOf(synset);
// Add the elements to the list
wordForms.addAll(elementsToAdd);
}
// Print the contents
System.out.println("\ts: " + wordForms);
或者,如果您想在 Java 8 中的功能样式中尝试此操作:
List<String> wordForms = synsetsNoun.stream() // Synsets
.map(WordNetSynset::getWordFormsOf) // Lists of wordForms
.flatMap(Collection::stream) // WordForms
.collect(Collectors.toCollection(ArrayList::new)); // Collect to ArrayList
// Print the contents
System.out.println("\ts: " + wordForms);
答案 2 :(得分:0)
如果您使用的是Java 8,则可以使用Stream。根据您的代码,WordNetSynset.getWordFormsOf(synset)
将返回List<String>
。
因此,您可以使用以下行替换行wordForms = WordNetSynset.getWordFormsOf(synset)
。
List<String> wordForms = new ArrayList();
List<Synset> synsetsNoun = wordnet.getNounSynsetsOf(category);
for (Synset synset : synsetsNoun) {
wordForms = Stream.concat(wordForms.stream(), WordNetSynset.getWordFormsOf(synset).stream())
.collect(Collectors.toList());
}
System.out.println("\ts: " + wordForms);
此外,如果您想从wordForms列表中删除重复项,可以将.distinct()
功能添加到您的流中。