mariusz-laszczka
#java #programowanie

Mirki, mam Hashmap zawierajaca id elementow i ich nazwe
oraz ArrayList

zawierajaca obiekty Code(id, nazwa, data, costam);

Chcę sprawdzić które elementy są w Mapie, ale nie ma ich w liscie (Integer,String to odpowiednio id i nazwa).

Czy jest lepszy sposób niż zrobienie tego lecąc w streamie po wszystkich kluczach i w liscie po wszyskich id porównując je:
`codesMap.keySet().stream().map(id -> codes.stream().anyMatch(code -> code.getId().equals(id)) ?....`
  • Najlepsze
  • Wszystkie komentarze
ekspertyzowy
@mariusz-laszczka: np zebys nie mial dwoch oddzielnych kolekcji przechowywujących wlasciwie te same dane, bez sensu trzymac to samo w dwoch miejscach, fajnie jak bys lepiej opisal dlaczego tak to zrobiles
Endr3w
@mariusz-laszczka: nie doczytałem, raczej innej opcji bez udziwnień nie ma :)
szczeppan
szczeppan
@mariusz-laszczka: spróbuj jeszcze tak. Powinno być czytelniejsze.

Set codesIds = codes.stream().map(Codes::getId).collect(Collectors.toSet());
Set mapIds = new HashSet(codesMap.keySet());
mapIds.removeAll(codesIds);
ekspertyzowy
@mariusz-laszczka: raczej nie ale pewnie mozesz przerobic tak zebys nie musial tego tak przeszukiwac
mariusz-laszczka
@ekspertyzowy: dzieki. W jakim sensie przerobic?
mafli
mafli
mafli
0
@mariusz-laszczka: Ewentualnie (jak masz duże te kolekcje) możesz sobie z mapy wyciągnąć keySet, liste przemapować na set z samymi ID i sie dowiesz ktorych ID nie ma (a jak chcesz też tego Stringa, to pewnie wrapnąć w klasę i podobnie)
Endr3w
@mariusz-laszczka: pobierz sobie keySet() i tylko raz po liście się przeiteruj?
mariusz-laszczka
@Endr3w: To tak robie wlasnie wyzej: Sprawdzam czy dla kazdego 'id' mapy istnieje takie id na liscie (przelatujac przez jej wszystkie elementy) i tak dla wszystkich 'id' mapy.