Предположим, у меня есть простой список:
List<String> listOne = Arrays.asList("str1", "result1", "test", "str4", "result2", "test", "str7", "str8");
Цель - «тест», и я хочу добавить значение перед целью в новый список, чтобы на выходе было [result1, result2]
.
Достаточно просто добавить "тестовые" значения с чем-то вроде listTwo = listOne.stream().filter(i -> i.equals("test")).collect(Collectors.toList());
, но как я могу получить значения в другом месте на основе местоположения цели (в моем примере это просто элемент перед целью)
Я попытался просто изменить i
на i - 1
, но это ничего не дало.
Я знаю, что могу сделать это с помощью простого цикла for, но мне просто интересно, как применить ту же логику к потоку.
for (int i = 1; i < listOne.size(); i++) {
if (listOne.get(i).equals("test")) {
listTwo.add(listOne.get(i - 1));
}
}