Вы можете сделать это с помощью простого фильтра во время потоковой передачи List<Vet>
для каждого Cat
:
public static void main(String[] args) {
// create some sample data
List<Cat> cats = new ArrayList<>();
List<Vet> vets = new ArrayList<>();
cats.add(new Cat(1, 25, "Persian", "Kitty", 123, ""));
cats.add(new Cat(2, 25, "Persian", "Pussy", 321, ""));
cats.add(new Cat(3, 150, "African Lion", "Simba", 231, ""));
cats.add(new Cat(4, 160, "Indian Tigre", "Shir Khan", 213, ""));
cats.add(new Cat(5, 120, "Pantera", "Pantera", 123, ""));
vets.add(new Vet(123, "Somewhere Road 123", "555-SHOE", "Dr. Bundy"));
vets.add(new Vet(321, "Vegas Boulevard 69", "216-WHITETIGERS", "Dr. Siegfried"));
vets.add(new Vet(231, "Baker Street 150", "150-MORIARTY", "Dr. Watson"));
vets.add(new Vet(213, "Mulholland Drive 1", "321-NOIDEA", "Dr. Lynch"));
// find out the names of the vets for each cat:
cats.forEach(cat -> {
Vet v = vets.stream()
// filter by id
.filter(vet -> vet.getId() == cat.getVetId())
// receive the first result
.findFirst()
// or set the result to null if no vet for the vetId of the cat was found
.orElse(null);
// check if v isn't null here, in this example it won't be, so I omitted the check...
// then print the results
System.out.println(cat.getName() + " gets its treatment from " + v.getName());
});
}
Обратите внимание, что мне пришлось угадывать типы атрибутов класса в Cat
и Vet
, потому что вы не упомянули их в своем вопросе.