Разбить ArrayList of Strings на другой ArrayList of Strings с типом возвращаемого значения - List, а не void - PullRequest
0 голосов
/ 17 октября 2018

Мой код должен возвращать Arraylist слов, когда ему дан другой Arraylist строк.

Например:

Ввод:

["Hello there"]

Вывод:

["Hello","there"]

Пока у меня есть:

public static List<String> stringToListOfWords(List<String> list )
        {   
            for(int i = 0; i <= list.size() - 1; i++)
            {
                String[] temp = (list.get(i).split("\\s+"));
                ArrayList<String> wordList = new ArrayList<String>(Arrays.asList(temp));

            }
            return(wordList);

        }

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

Любая помощь будет отличной!

Ответы [ 3 ]

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

Если вы используете Java 8, вы можете отказаться от цикла и использовать forEach вместо

public static List<String> stringToListOfWords(List<String> list) {
    List<String> wordList = new ArrayList<>();
    list.forEach(item->{
        String[] temp = item.split("\\s+");
        wordList.addAll(Arrays.asList(temp));
    });
    return wordList;
}

или, если вы хотите использовать Streams, вот один вкладыш

public static List<String> stringToListOfWords(List<String> list) {
    return list.stream()
            .map(word -> word.split("\\s+"))
            .flatMap(Arrays::stream)
            .collect(Collectors.toList());
}
0 голосов
/ 17 октября 2018

Вы можете рассмотреть использование потоков начиная с Java 8:

public static List<String> stringToListOfWords(List<String> list){
    return list.stream()
               .flatMap(s -> Arrays.asList(s.split("\\s+")).stream())
               .collect(Collectors.toList());
}
0 голосов
/ 17 октября 2018

Вы должны создать один ArrayList перед циклом и добавить к нему все слова внутри цикла:

public static List<String> stringToListOfWords(List<String> list )
{   
    List<String> wordList = new ArrayList<> ();
    for(int i = 0; i <= list.size() - 1; i++) {
        String[] temp = list.get(i).split("\\s+");
        wordList.addAll(Arrays.asList(temp));
    }
    return wordList;

}
...