• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - zmiana elementu w liście

Object Storage Arubacloud
0 głosów
708 wizyt
pytanie zadane 25 marca 2021 w Java przez PGR Obywatel (1,360 p.)

Witam ma problem ze zmianą elementu w liście. Zrobiłem sobie listę która ma być dwuwymiarowa.  

List<String[]> start = new ArrayList<String[]>();

Następnie pobieram w pętli dane z bazy danych i wstawiam do poszczególnych wierszy   

	        	start.add(new String[] { 
	        			rs.getString("id_pracownika"), 
	        			rs.getString("data_rozpoczecia"),
	        			rs.getString("czas"),
	        			"F"
	        		});

I tu pojawia się mój problem chciałbym w 3 wierszu w kolumnie 4 zmienić dane w liście z ''F" na "M" ale nie mogę sobie z tym poradzić.

start(3).set(4,"M");

Proszę o pomoc 

komentarz 25 marca 2021 przez tkz Nałogowiec (42,000 p.)
Dlaczego nie użyjesz mapy albo obiektu DTO?
komentarz 25 marca 2021 przez PGR Obywatel (1,360 p.)

Wymagało by to zmiany dość dużej ilości kodu. A zmiana tej wartości to już sama końcówka programu. Jak najwyżej nie znajdę rozwiązania to rozważę Twoją propozycje. 

String s_data=start.get(j)[1];

Dodam że metoda get normalnie pobiera mi dane. 

komentarz 25 marca 2021 przez Wiciorny Ekspert (269,710 p.)

@tkz, obiektu DTO?  DTO to wzorzec dystrybucji obiektu,  ktory ma slużyć jako transfer informacji w warstwach aplikacji - tzn pomiedzy nimi 

1
komentarz 25 marca 2021 przez tkz Nałogowiec (42,000 p.)
W zasadzie można to pod to podciągnąć. Masz warstwę logiki - zapytania do bazy, warstwę prezentacji - wyświetlanie rezultatu. Jakby ująć DTO w trzech słowach, to po prostu kontener na dane.
komentarz 25 marca 2021 przez Wiciorny Ekspert (269,710 p.)
nie no stary, pytanie jest "nie mogę zmienić elementów w liście" to ja Ciebie dlatego zapytałem, co ma do tego DTO, nie twierdze nie rozumiesz, ale wydawało mi się i dalej sądzę że to ni jak się ma do kolegi problemu :D
tak DTO to kontener zgadza się, ale nie rozwiązuje jego problemu :D -
komentarz 25 marca 2021 przez tkz Nałogowiec (42,000 p.)

W sumie, nie przedstawiłem rozwiązania albo przynjamniej zamysłu. 

List<String[]> start = new ArrayList<String[]>();

Chciałem zamienić to, na
 

List<Obiekt> start = new ArrayList<Obiekt>();

i dzięki temuto

start.add(new String[] { 
        rs.getString("id_pracownika"), 
        rs.getString("data_rozpoczecia"),
        rs.getString("czas"),
        "F"
    });

zamienimy na
 

var ob = new Obiekt { 
        rs.getString("id_pracownika"), 
        rs.getString("data_rozpoczecia"),
        rs.getString("czas"),
        "F"
    }
start.add(ob);

co przyczyni się do czytelnośći. 

Dodatkowo java zapewnia comparatory. Więc możemy ustawić taki, który szuka po id. Zmiany w obiekcie powinny być łatwiejsze. 

Jako, że nie piszę w javie na co dzień, mogę się mylić, co do "prostoty" mojego rozwiązania. 

 

Ale jeżeli miałbym korzystać z tych danych dłużej, to w mojej ocenie najlepszym wyborem będzie mapa. Z racji, że id w bazie nie może się powtarzać, mapa zapewnia O(1) czas do klucza. 

1 odpowiedź

0 głosów
odpowiedź 25 marca 2021 przez Wiciorny Ekspert (269,710 p.)
edycja 25 marca 2021 przez Wiciorny
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
     String next = iterator.next();
     if (next.equals("Two")) {
         //Replace element
         iterator.set("New");
     }
 }

Wzorzec iterator ? Iterowanie przy użyciu Iteratora z javy i dodanie dodatkowego indexowania na 2 wymiar nie rozwiąże problemu ? Bo nie rozumiem w czym jest problem  ?

Bo jesli tylko z brakiem indeksów to pomoże iterator, też pomoże w przypadku tego ze zamiast nadpisywać element w tym samym momencie możesz usunąć element aktualny i wstawic do niego nowy, z tym ze takie operacje sa pase- w ogóle modyfikowanie listy w locie jest niepoprawne i powinna lista byc immutable

Podobne pytania

0 głosów
1 odpowiedź 287 wizyt
pytanie zadane 24 kwietnia 2020 w Java przez jasper93 Obywatel (1,310 p.)
0 głosów
2 odpowiedzi 187 wizyt
0 głosów
0 odpowiedzi 267 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...