Вызов метода с атрибутом списка в Java - PullRequest
0 голосов
/ 26 октября 2018

В настоящее время я ищу метод, который дает мне оценку нескольких слов и возвращает слово с наибольшим количеством очков.Я был в состоянии сделать метод, который получает мне оценку слов, следующая часть должна быть в состоянии вызвать метод с несколькими словами, и он вернет слово с наибольшим счетом.

public String highestScoringWord(List<String> words) {
    // TODO: find the word with the highest score
    int highestScore = 0;
    String HighScoreWord = "";
    for(int i=0; i<words.size(); i++){
        int currentScore = scoreForWord(words.get(i));
        if(currentScore>highestScore){
            HighScoreWord = words.get(i);
        };
    };

    return HighScoreWord;
}

Я использую blueJ, как я смогу использовать его интерфейс или codePad для вызова этого метода со списком слов.

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Если вы используете Java 8 или новее, вы можете использовать потоки, чтобы получить «максимум» списка оценок, который вы собираетесь создать:

List<String> words = Arrays.asList("Dog", "Cat", "Bird");
int highest = words.stream()
        .map(this::scoreForWord)
        .max(Integer::compareTo)
        .orElse(0);

Что делает этот код:

  • words.stream() - Инициализирует поток, используя список слов.
  • .map(this::scoreForWord) - Преобразует каждую строку в int, используя логику функции int scoreForWord(String). Этот метод называется this, потому что я предположил, что это метод экземпляра. Если метод равен static, вы должны использовать имя класса для ссылки на функцию: ScrabbleScorer::scoreForWord
  • .max(Integer::compareTo) - получает максимальное значение потока Integer, созданного из предыдущей операции. Логика будет целочисленным компаратором по умолчанию (то есть Integer::compareTo)
  • .orElse(0) - Поскольку операция .max() возвращает Optional<Integer>, когда данный список в самом начале пуст - мы будем обрабатывать пустой сценарий возврата. Мы использовали значение 0, чтобы принять такой случай.
0 голосов
/ 26 октября 2018

Сначала вы должны сделать List<String> из ваших слов, потому что метод String highestScoringWord(List<String> words) принимает только List<String> в качестве входного параметра.В вашем случае теперь вы можете сделать List<String> из нескольких объектов String.

List<String> words= Arrays.AsList("Word1","Word2","Word3","Word4");

Теперь Передайте этот список уже определенной функции highestScoringWord.

String highestScore=highestScoringWord(words);

Вы получите желаемый результат.

...