obsługa Hashmapy

0

w metodzie main wywołuje sobie 2 razy tą samą metode: placeInTrain. Do zapisu danych używam hashmapy.
jak zrobić, żeby hashmapa nie tworzyła mi się od nowa za każdym razem wywołania metody, tylko sumowała wynik?

https://paste.ofcode.org/hzbhjxZ8cq3LUQRQ7BtKU

0

W kodzie którzy podałeś mapa jest tylko jedna i wywołanie metody wcale nie tworzy nowej.
To co robisz w tym kodzie to jest ciężki #rakcontent niemniej problem który opisałeś w ogóle nie występuje. Napisz może łaskawie co chciałeś osiągnąć i co się dzieje.

0

@Shalom: chciałem żeby za każdym wywołaniem metody, hashmapa się aktualizowała tzn. sumowała wynik. Teraz wyniki się nadpisują.
Po wykoniu pierwszej metody mapa powinna wygląć tak: (1;20,2;20,3;20,4;20,5;20), po drugim( 1;35, 2;35,3;45,4;35,5;35)

1

Możesz użyć Map.compute.

Działa to następująco:

	Map<Integer, Integer> map = new HashMap<>();
	map.put(1, 10); 

	int increment = 15;

	// Chcemy, żeby jeśli klucza nie ma to wstawiał 15, jeśli jest to niech dodaje 15.
	for(int i=1; i<=2; i++){
		map.compute(i, (key, value) -> increment + (value == null ? 0:value));
	}

	System.out.println(map.get(1)); // Daje 25
	System.out.println(map.get(2)); // Daje 15

EDIT:
Zgodnie z tym co napisał @jarekr000000 można użyć Map.merge. Zaletą jest brak null-checka.

	Map<Integer, Integer> map = new HashMap<>();
	map.put(1, 10);

	int defaultValue = 15;
	for(int i=1; i<=2; i++){
		map.merge(i, defaultValue, (prevValue, newValue) -> prevValue + newValue);
	}

	System.out.println(map.get(1)); // Daje 25
	System.out.println(map.get(2)); // Daje 15
0

o_O wkładasz do mapy nowe dane przez put to co się dziwisz że się "nadpisuja"? Myślisz trochę nad tym co robisz? Mapa ma takie rzeczy jak choćby putIfAbsent albo getOrDefault. Logika nakazywałaby że:

  • pobierasz z mapy aktualną wartość
  • wyliczasz nową
  • wkładasz do mapy nową wartość
    Nie trzeba już nawet kombinować tak jak kiedyś i sprawdzać czy w mapie jest juz dany klucz bo wystarczy ci getOrDefault gdzie możesz zwrócić 0 jeśli klucza w mapie jeszcze nie było.

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