Как вывести те слова из файла, последняя буква которых равна первой букве следующего через stream

У меня есть файл. Его содержимое

Hello World!
Hello Java!
Apple Eagle Apple
Dog Ground Dog

Я написал метод

public static List<String> getWordsListEndingWithLetterEqualFirstLetterOfNextWord(String file) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        List<String> list = new ArrayList<>();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            list.addAll(Arrays.asList(line.split(" ")));
        }
        return list.stream()
                .filter((i -> i.charAt(i.length() - 1) == (i + 1).charAt(0)))
                .collect(Collectors.toList());
    }

Сначала я разбиваю файл по отдельным словам, а потом добавляю в список. Далее через stream я пытаюсь сравнить последнюю букву элемента с первой буквой следующего элемента. Вот только не понимаю почему вместо == я не могу использовать equalsIsIgnoreCase(). Могу только в случае, если убрать charAt(). Даже если заменить все заглавные буквы на строчные, то выведет только eagle(видимо, переход на след. элемент я неправильно прописал и сравниваются 1-ая и последняя буква слова). Очень приветствуется объяснение того, почему это не работает.

Ожидаемый вывод

[Apple, Dog, Ground]

Ответы (1 шт):

Автор решения: Дмитрий

Пробуйте так:

public static List<String> getWordsListEndingWithLetterEqualFirstLetterOfNextWord(String file) throws IOException {
    
    final List<String> list = Files.lines(Paths.get(file))
            .flatMap(line->Arrays.stream(line.split(" ")))
            .collect(Collectors.toList());
    
    return IntStream.range(0, list.size()-1)
            .filter(i -> {
                String current = list.get(i);
                String next = list.get(i+1);
                return current.substring(current.length()-1).equalsIgnoreCase(next.substring(0, 1));
            })
            .mapToObj(list::get)
            .collect(Collectors.toList());
}
→ Ссылка