• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
924 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,020 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 (278,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,020 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 (278,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,020 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 (278,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ź 346 wizyt
pytanie zadane 24 kwietnia 2020 w Java przez jasper93 Obywatel (1,310 p.)
0 głosów
2 odpowiedzi 306 wizyt
0 głosów
0 odpowiedzi 317 wizyt

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,516 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2704p. - Tomasz Bielak
  5. 2678p. - Łukasz Siedlecki
  6. 2666p. - rucin93
  7. 2627p. - CC PL
  8. 2485p. - Marcin Putra
  9. 2418p. - Michal Drewniak
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 2127p. - Michał Telesz
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...