Filtrowanie dwóch list

0

Mam problem przefiltrować dwie list . Jeżeli id dwóch obiektów liście jest takie same to zwróć listę tych obiektów.

List<Media> medias
List<Media> mediaFields

List<Medias> = medias.stream().filter(m->mediaFields.stream().map(mf->mf.getId().equals(m.getId()))).collect(Colletors.toList);

1

Rozumiem, że skoro id jest takie same to ten sam obiekt? Całkiem prosto można to przefiltrować. Wystarczy sprawdzić, czy druga lista zawiera element pierwszej:

List<Media> result = medias.stream()
                .filter(item -> mediaFields.contains(item))
                .collect(Collectors.toList());
1

Hej. Jeśli to nie są "te same" obiekty i chcesz mieć połączoną listę wszystkich obiektów (o tym samym id) możesz to zrobić tak:

List<Media> media1 = Arrays.asList(new Media(1, "CD-abc"), new Media(2, "CD-cde"));
List<Media> media2 = Arrays.asList(new Media(1, "CD-xyz"), new Media(3, "CD-def"));

List<Media> sum = new ArrayList<>(media1);
sum.addAll(media2);

List<Media> result = sum.stream()
                .collect(Collectors.groupingBy(Media::getId))
                .values()
                .stream()
                .filter(v -> v.size() > 1)
                .flatMap(Collection::stream)
                .collect(Collectors.toList());

System.out.println("result: " + result);

Interaktywny przykład: https://programuj.pl/snippet/1fa4069d-5c90-4334-b8e9-0a37e8955603

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