Java strumienie

Java strumienie
MA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:30
0

Cześć, potrzebuje wyciągnąć informacja z pewnej ArrayListy.
Mam listę produktów List<Product> products. Może zawierać wiele wystąpień tych samych produktów. Chcę poprzez strumień stworzyć mapę Map<Product, Integer> która przedstawiać ma ile razy każdy z produktów występuje w liście. Nakierujecie co pokolei ??

edytowany 1x, ostatnio: manifestor
NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:455
3

Masz gotowe funkcje groupBy, która wszystko załatwia bez wysiłku.
Użyj na streamie collect() i w tej metodzie podaj Collectors.groupBy()

nowyworek
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:świat
  • Postów:174
1

Dwa collecotry beda potrzebna, groupBy i counting


Julian
Skoq
  • Rejestracja:około 6 lat
  • Ostatnio:7 minut
  • Lokalizacja:Kraków
  • Postów:255
1

Możesz też użyć Collectors.toMap() z merge function


I tak to właśnie jest
MA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:30
0

Dzięki za przypomnienie :) I znów utknąłem. Z Mapy Map<Product, Integer> czyli produkt gdzie jest cena i Integer zawiera ilość. Muszę wyliczyć łączny koszt zakupów.

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

No i gdzie problem? o_O mapujesz entry z tej mapy do cena*ilość a potem robisz collector summing


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
MA
Zrobiłem tak .collect(Collectors.summarizingDouble(x -> x.getKey().getPrice().multiply (new BigDecimal(x.getValue())).doubleValue()));
NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:455
2

@manifestor: radziłbym na spokojnie przysiąść i pouczyc się tego stream Api, bo to są podstawy. No offence oczywiście.

edytowany 1x, ostatnio: NeutrinoSpinZero

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.