В ArrayList хранится необработанный текст.Чтобы убрать ненужные строки сверху, мне нужно найти индекс строки, содержащей определенный тег.
Тег - это не полная строка, а только подстрока.Это означает, что я не могу использовать myArrayList.indexOf («маркер начала»)
(indexOf ищет только полные строки)
Я пытался поместить счетчик в поток, считая строки, которые он обрабатывает, пока не найдетмаркер, но он не работает.
Используя цикл for, я могу найти индекс, но это медленно и безобразно (также приводило к некоторым ошибкам памяти).
Потоковая передача ArrayList через фильтр и возвращение потоком строки, содержащей маркер, дает мне полную строку, которую я ищу.Наличие полной строки включает метод ArrayList.indexOf.
В целом это работает сейчас, но я все еще хочу знать, как установить счетчик для потока.
Цикл For (работает, но уродливо):
for(String s : myArrayList)
{
if(s.contains("marker text"))
{
break;
}
else counter++;
}
Поиск полной строки (достойное решение):
String markerText = myArrayList.stream().filter(s -> s.contains("marker text")).
findFirst().orElse("marker not found");
int x = myArrayList.indexOf(markerText);
Это не работает:
int counter = 0;
myArrayList.stream().peek(counter++).
filter(s -> s.contains("marker text")).findFirst();
Не компилируется, так как peek () отказывается работать с целым числом x.
Я также пытался привести x к типу AtomicInteger и вызвать метод getAndIncrement ().Это тоже не работает.
Я вижу много похожих тем, но все они используют метод foreach.Может кто-нибудь сказать мне, что я делаю не так?