Учитывая, что в качестве выходных данных вы хотите использовать один список, возможно, наиболее правильным было бы создать метод, который делает это и ссылается на него: .map(this::asResource)
public Resource asResource(Person person) {
if (person.getPhoneType() == PhoneType.WORK) {
return new WorkResource(person);
} else {
return new HomeResource(person);
}
}
Это сделало бы ваш код похожим на:
personList.stream()
.map(this::asResource)
.collect(toList());
Вы также можете объявить этот метод в другом классе как статический, чтобы использование выглядело, например, как. как это PersonConverter::asResource
.