Я ненавижу это правило (может быть, мне пора заняться его отключением и в нашем проекте).Ну, во-первых, в сообщении об ошибке говорится, что может быть окончательным, а не то, что должно быть окончательным, это похоже на крошечную рекомендацию, а не правило как таковое.
Тем более, что ваша переменная фактически окончательная в любом случае, я бы подавил это предупреждение, или лучше (может быть) полностью избавиться от него (не уверен, что PMD позволяет это).
Но вы могли быобойти это с помощью простого рефакторинга:
return nodes.stream()
.map(String::toUpperCase)
.flatMap(n -> getAdjacentNodes(n).stream())
.filter(nodeId -> !(nodes.contains(nodeId.toLowerCase())))
.collect(Collectors.toSet());