В приведенном ниже примере создается Map
объектов Metadata
с использованием идентификатора в качестве ключа. Это поможет в производительности, так как нет необходимости перебирать список Metadata
для каждого Person
в List
Код
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person(1, "Mike", "Canada"),
new Person(2, "Jill", "England"),
new Person(3, "Will", "Whales"),
new Person(4, "Mary", "Spain"));
List<Metadata> metadataList = Arrays.asList(
new Metadata(1, "2000-01-01", "Naturalized", "Bachelor's of Arts"),
new Metadata(2, "2001-01-01", "ExPat", "Masters of Chemestry"),
new Metadata(3, "2017-05-01", "Citizen", "Buiness Management"),
new Metadata(4, "2018-04-16", "Work Visa", "Nursing"));
//Iterate over metadataList once and create map based on ID as key
Map<Integer, List<Metadata>> metadataMap = metadataList.stream()
.collect(Collectors.groupingBy(Metadata::getId));
//Iterate over personList and fetch metadata from Map to build PersonWithMetadata
List<PersonWithMetadata> personWithMetadataList = persons.stream().map(person -> {
List<Metadata> metadata = metadataMap.get(person.id);
if (metadata.isEmpty()) {
//TODO: Handle scenario for no metadata for person
}
//TODO: Build PersonWithMetadata
return new PersonWithMetadata();
}).collect(Collectors.toList());
}