Как лучше сохранить общие элементы из двух разных коллекций в Java 8? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть две коллекции. Во-первых, Arraylist of Objects, где каждый объект имеет имя и UUID в качестве переменных. Вторая коллекция - Arraylist UUID. Каков наилучший способ сохранить элементы в первом массиве, где UUID первого массива являются частью второго массива UUID?

Example example1 = new Example();
example1.setUuid(uuid1);
Example example2 = new Example();
example2.setUuid(uuid2);
Example example3 = new Example();
example3.setUuid(uuid3);
Example example4 = new Example();
example4.setUuid(uuid4);
Example example5 = new Example();
example5.setUuid(uuid5);

List<Example> exampleList = new ArrayList<>();
exampleList.add(example1);
exampleList.add(example2);
exampleList.add(example3);
exampleList.add(example4);
exampleList.add(example5);

List<UUID> uuidList = new ArrayList<>();
uuidList.add(uuid1);
uuidList.add(uuid2);
uuidList.add(uuid3);

Каков наилучший способ сохранить элементы в exampleList, содержащем только UUID из uuidList, которые представляют собой uuid1, uuid2, uuid3, без использования a для l oop? Было бы здорово использовать поток и фильтр, но я не смог это понять.

final List<Example> finalList = exampleList
                    .stream()
                    .filter(x -> !uuidList.contains(x))
                    .collect(Collectors.toList());

Но в данный момент это не работает, и я получаю жалобу от компилятор, который uuidList не является окончательным. Каков наилучший способ реализовать это, что не так в моей реализации?

ОБНОВЛЕНИЕ: Минимальное воспроизводимое Пример:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

public class HelloWorld{


static class Example {
    UUID uuid;

    void setUuid(UUID uuid){
        this.uuid = uuid;
    }

    UUID getUuid(){
        return this.uuid;
    }
}

 public static void main(String []args){
    Example example1 = new Example();
    example1.setUuid(UUID.fromString("69320518-585f-43c8-a935-b6e0438042b7"));
    Example example2 = new Example();
    example2.setUuid(UUID.fromString("69320518-585f-43c8-a935-b6e0438043b7"));
    Example example3 = new Example();
    example3.setUuid(UUID.fromString("69320518-585f-43c8-a935-b6e0438044b7"));
    Example example4 = new Example();
    example4.setUuid(UUID.fromString("69320518-585f-43c8-a935-b6e0438045b7"));
    Example example5 = new Example();
    example5.setUuid(UUID.fromString("69320518-585f-43c8-a935-b6e0438046b7"));

    List<Example> exampleList = new ArrayList<>();
    exampleList.add(example1);
    exampleList.add(example2);
    exampleList.add(example3);
    exampleList.add(example4);
    exampleList.add(example5);

    List<UUID> uuidList = new ArrayList<>();
    uuidList.add(UUID.fromString("69320518-585f-43c8-a935-b6e0438047b7"));
    uuidList.add(UUID.fromString("69320518-585f-43c8-a935-b6e0438048b7"));
    uuidList.add(UUID.fromString("69320518-585f-43c8-a935-b6e0438049b7"));

    final List<Example> finalList = exampleList
            .stream()
            .filter(x -> !uuidList.contains(x.getUuid()))
            .collect(Collectors.toList());
    System.out.println(finalList);

 }
}
...