Фон у меня есть две переменные типа String str1 и str2 в качестве входных данных. Наконец я должен вернуть список, который содержит последовательный префикс str1, который меньше соответствующего префикса в str2.
У меня есть такой код Java:
public List<Character> getPrefix(String str1, String str2) {
int index = 0;
List<Character> res = new ArrayList<>();
//str1 = "1243"
//str2 = "2324"
// The answer will be "12".
while (index < str1.length() && index < str2.length() && str1.charAt(index) <= str2.charAt(index)) {
res.add(str1.charAt(index));
index++;
}
return res;
}
//the return type could either be List<String> or List<Character>
Меня попросили преобразовать этот код в поток без использования цикла while или for, просто в методе stream. Я планирую конвертировать этот код следующим образом
List<String> list = new ArrayList<>();
list.add(str1);
list.add(str2);
List<String> res = list.stream()
.filter()
.reduce();
Я обнаружил, что метод filter()
может выбрать элемент, который соответствует данному предикату, а метод reduce()
может использовать идентификатор и аккумулятор для получения одного окончательного результата.
Но я обнаружил, что у меня не было ни способа управлять двумя смежными элементами в одном списке, ни получить один указатель для сравнения и прохождения каждого символа в каждом элементе в списке (элемент имеет тип String).
Так есть ли способы, которыми я мог бы управлять двумя смежными элементами в одном списке, чтобы я мог сравнить их символы, которые находятся в одной и той же позиции.