Lepiej stworzyć obiekt czy 2 mapy?

Lepiej stworzyć obiekt czy 2 mapy?
TM
  • Rejestracja:prawie 4 lata
  • Ostatnio:około miesiąc
  • Postów:91
0

Potrzebuje wyfiltrować pewne wartości, które przychodzą z dwóch źródeł.

Np. dostaje z jednego zródła: <"marka samochodu", ilość>; a z drugiego źródła: <kolor, marka samochodu, pojemosc>.

Teraz musze wybrać wszytkie marki samochodu i w zależności która marka miała najwięcej samochodów będę wykonywał na samym konću metody juz wybrane dla nich działanie. Dodatkowo jeżeli mam dwie takie same marki samochodów, ale różnią sie początkiem nr seryjengo to musze wybrać tą markę która ma wiekszą liczbę samochodów.

I teraz mam pytanie: czy tworzyć do tego obiekt pomocniczy czy załatwić to kolkecjami chyba że inny sposób widzicie? Nie wiem czy jest sens tworzenie obiektu tylko aby uzyć go w tym jednym miejscu.

edytowany 2x, ostatnio: Riddle
MrMadMatt
  • Rejestracja:ponad 9 lat
  • Ostatnio:12 dni
  • Postów:373
1

Używałbym Listy i streamów. Mapy o ile bym używał to tylko tej wynikowej z stream groupBy.

ZI
  • Rejestracja:ponad 8 lat
  • Ostatnio:5 dni
  • Postów:230
0

Nie do konca rozumiem o co Ci chodzi ale moze po prostu jakas sortowana kolekcja? i od razu mialbys to ustawione w kolejnosci jaka chcesz zaleznie od implementacji komparatora?

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
3
TakMaszRacje napisał(a):

Dodatkowo jeżeli mam dwie takie same marki samochód ale różnią sie początkiem nr seryjengo

Uspokój, pooddychaj głęboko.

Jak zaczniesz samemu sobie jaśniej mówić o problemie, kod sie sam napisze
Nie da sie do chaotycznych tzw "założeń" napisać dobrego kodu, a póki co opowieść ma jakość bełkotu.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
BB
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 miesiące
  • Postów:66
0
TakMaszRacje napisał(a):

. Dodatkowo jeżeli mam dwie takie same marki samochód ale różnią sie początkiem nr seryjengo to musze wybrać tą markę która ma wiekszą liczbę samochodów. .

Jeśli masz dwie takie same marki (np. kia nr seryjny 123 ilość 100 i kia nr seryjny 456 ilość 200) to bez znaczenia którą wybierzesz zawsze to będzie kia.

edytowany 1x, ostatnio: bbzzyyczczeek
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Laska, z Polski
  • Postów:10076
1
TakMaszRacje napisał(a):

Nie wiem czy jest sens tworzenie obiektu tylko aby uzyć go w tym jednym miejscu.

Nie ma nic złego w tworzeniu obiektu żeby go użyć raz.

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
1

Jeden pies

Dev007
  • Rejestracja:ponad 3 lata
  • Ostatnio:15 dni
  • Postów:161
0

Można obiek i możesz rozwiązać to koleją, Można użyć jeszcze takiej formy np. Map<String, Map<String, String > outMap = new .. Może to pomoże rozwiazać problem

N4
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:8
1

Jeśli miałby ocenić poziom trudności zadania od zera do 10. to bym dał. 1e-10000.

w pythonie możesz zrobić coś w stylu sorted(lambda x: x[1])
chyba, że na słownikach pracujesz to wtedy klucze sortujesz.

Ten problem jest mega podstawowy, aż głupio się pomaga albo próbuje pomóc to takie easy easy easy poziom, tyle że bardzo niezrozumiale to zapisałeś i nie da się tak łatwo wywnioskować o co ci chodziło.

TM
  • Rejestracja:prawie 4 lata
  • Ostatnio:około miesiąc
  • Postów:91
0

czy cos takiego będzie dobrze ( nie patrzcie na nazwy bardziej sama skłądania)? Java 1.6 własnie w tym problem bo tak uużyułbym streamów a nie mogę.

		for (carData car : carDataList) {

				int calculatedVolume = calcualte( car.getVolume())

				if (!checkDuplicateList.containsKey(car.getType()) && car.getVolume() != null) {
					Map<Integer, Integer> innerMap = new HashMap<Integer, Integer>();
					innerMap.put(Integer.parseInt(car.getShpId().toString()), calculatedVolume);
					checkDuplicateList.put(car.getScantype(), innerMap);

				}else if (checkDuplicateList.containsKey(car.getScantype())) {
						for (Map.Entry<String, Map<Integer, Integer>> entry : checkDuplicateList.entrySet()) {
							for (Map.Entry<Integer, Integer> inermap : entry.getValue().entrySet()) {
								int inMapVolume = inermap.getValue();
								if(calculatedVolume < inMapVolume){
	                                 .....
								}
							}
						}
					}

				}
			
		}
edytowany 1x, ostatnio: TakMaszRacje
Korges
  • Rejestracja:około 5 lat
  • Ostatnio:około 9 godzin
  • Postów:570
1

Jeśli obiektów w tej kolekcji bedziesz miał dużo to mapa lepsza. Bedzię wydajniejsza podczas wyszukiwania.

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:16 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Masz dwa źródła danych.

Pytania

Jak łączysz rekordy z tych źródeł?
Czym jest numer seryjny, bo nie ma go w opisanych strukturach?

Założenie

Marka samochodu jest identyfikatorem rekordów pozwalających na łączenie rekordów z różnych źródeł

Propozycja

Utwórz rekord:

Kopiuj
record CarSearchPojection(String brand, String color, int quantity, int capacity);

Następnie połącz źródła z wykorzystaniem biblioteki assembler/cohereflux w wersji 0.6.6, która jeszcze obsługuje klasyczne kolekcje. Następnie dostaniesz strumień CarSearchPojection na którym możesz wykonywać operacje.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.