Usuwanie przedostatniego rekordu z listy

0

Witajcie mam taki problem, mam plik w ktorym sa akapity pogrupowane w stylu:

download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 1234

download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 1234

. . . itd

ale nieraz wystepuje powtorka wielkosci:

download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 1234

download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 1234

download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 1234           <- to trzeba usunac w tym wypadku
- dostep = user
- wielkosc = 124532

download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 123532425                                
- dostep = user
- wielkosc = 124532          <- to trzeba usunac w tym wypadku

. . . itd

I teraz jak pozbyc sie tych powtorek z pliku?
Moj pomysl ktory robie to caly plik mam juz w List<String> (kazda linijka osobno) wiec jak moge poruszac sie po tej liscie w celu usuniecia powtorki, ktora nastapi za 2 iteracje (albo i nie nastapi wcale).
Ale jak nastapi to zawsze po 2ch iteracjach.
Nastepnie porownac wartosci i usunac ta mniejsza wartosc wielkosci. Z porownywanie nie mam problemu, mam problem z odwolaniem sie do dokladnie przedostatniej linijki iteracji wzglednie 2giej nastepnej
Probuje iteratorem ale nie wychodzi, takze petla for each ale nie moge usuwac w niej rekordow listy bo mam "UnsupportedOperationException"

W sumie jednego czego nie potrafie rozwiazac to jak poruszac sie iteratorem kilka rekordow do przodu/tylu, cos usunac a potem wrocic na stare miejsce i isc dalej z petla?
Ma ktos jakis pomysl?

0
  1. Przekonwertuj String (cały plik) na List<String>, gdzie String to jeden paragraf:
download: plik
- typ = "Dokument Typ"
- nazwa = "nazwa"
- plik = nazwa.plik
- wielkosc = 1234
  1. Przekonweruj każdy String (paragraf) na LinkedHashMap<String, String> (gdzie kluczem jest wielkosc, dostep, itp, a wartością cała linijka, czyli - wielkosc = 124532 ). LinkedHashMap dla zachowania kolejności jeśli jest ważna.
    Przed wsadzeniem do mapy wykonuj sprawdzenie czy dany klucz istnieje i czy należy go nadpisać

  2. Połącz wartości mapy w jednego stringa,

  3. Połącz wszystkie stringi ze sobą

0

Odczytujesz sobie linijka po linijce za pomocą BufferedReader.
Jeżeli napotykasz na słowo download to ustawiasz licznik na 0
jak napotykasz ciąg - wielkość zwiększasz licznik o 1
jeżeli linia zaczyna się od wielkość i licznik jest większy niż 1 omijasz
w przeciwnym wypadku wrzucasz linię do innego pliku, bufora, co ci tam wygodnie.

Jeżeli filtrowane mają być wszystkie wpisy, a nie tylko wielkość, to zamiast pojedynczego licznika używasz Map<String, Integer> i postępujesz analogicznie, pamiętając o wyczyszczeniu takiej mapy zamiast zerowania licznika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1