如何在arrayList

时间:2016-10-16 19:08:25

标签: java string object arraylist

这是我的问题,我必须解释很多,因为它很复杂。

我创建了一个arrayList< Word >,其中包含字符串作为对象。在我的例子中,我有三个类,一起工作,应该代表字典。

第一个类叫做“Word”,它有一个构造函数,并且有简单的方法,如.length,向计数器加1,并跟踪重复的单词。

第二类被称为“Wordlist”,并使用更高级的方法,如读取文件,总结30,000个单词。例如,有些方法是将单词添加到arraylist中作为对象。搜索方法,如果他们可以找到一个特定的单词。现在,这些任务包含参数,包含我可以使用的变量。

但我遇到了一个任务,我必须在arrayList中找到最长的单词(字符串),没有任何参数。该方法称为:public Word findLongest()。

在thrid类中,我有测试用例,我使用的是方法。这里最重要的部分是读取文件,并将其添加到arrayList对象。我可以用什么方法在没有任何参数的情况下使用该方法查找arrayList中最长的单词(字符串)?

将arrayList作为对象非常混乱。

我知道 for(each:array)在这个意义上使用,但不知道如何正确使用它。

3 个答案:

答案 0 :(得分:0)

假设您的 Word 类有一个名为 length()的方法,可能是这样的:

Word longest = arrayList.get(0);
for (int i=1; i<arrayList.size(); ++i) {
   if (arrayList.get(i).length() > longest.length()) {
      longest = arrayList.get(i);
   }
}

答案 1 :(得分:0)

如果您的Word类提供的length()方法只返回该对象所代表的单词的长度,那么您可以浏览ArrayList<Word>并查找最长的代码:

private Word getLongestWordFromList(List<Word> listOfWords) {
    Word longestWord = null;
    for (Word word : listOfWords) {
        if (longestWord == null || word.length() > longestWord.length()) {
            longestWord = word;
        }
    }
    return longestWord;
}

for (Word word : listOfWords)模式简单地说:迭代名为“listOfWords”的List并将当前Word对象存储在名为“word”的变量中。然后你只需检查每个单词的长度,看它是否比已找到的最长单词长。 (如果longestWord变量是null,那么这意味着到目前为止你还没有处理任何单词,所以找到的第一个单词将进入该变量,准备好与下一个进行比较。)

注意:如果有多个长度最长的单词,则此方法将返回找到该长度的第一个单词。如果您需要返回所有长度最长的单词列表,则需要修改此模式以生成List<Word>,其中包含所有长度最长的单词。

答案 2 :(得分:0)

对于Java Stream发烧友来说,一个非常声明式的解决方案是:

private Word getLongestWordFromList(List<Word> listOfWords) {

    return listOfWords.stream()
        .filter(word -> word != null)
        .max(Comparator.comparing(Word::length))
        .orElse(null);

}

filter确保流跳过空值。

max比较单词长度,并返回具有最大长度值的Optional<Word>。请注意,我们也可以写Word::length来代替word -> word.length()

orElse“解包”可选值。如果找不到任何内容(例如,因为每个值均为nulllistOfWords为空),则返回null