Есть ли способ проверить состояние при потоковой передаче списка - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть объект Persons, и у него есть поле contactType. Теперь в соответствии с типом контакта я хочу отобразить List в другой файл ресурсов, т.е. WorkContactResource или HomeContactResource. Я буду использовать Java 8.

workContact=personList.stream().filter(p->p.getPhoneType == PhoneType.WORK).map(WorkResource::new).collect(Collectors.toList());

homeContact=personList.stream().filter(p->p.getPhoneType == PhoneType.HOME).map(HomeResource::new).collect(Collectors.toList());

workContact.addAll (homeContact);

Я сделал два разных списка. Но то, что я хочу, во время потокового списка peopleList, я бы проверил, является ли contactType домом или работой, и там только привязка к конкретному ресурсу. Как этого добиться.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Я полагаю, что это должно быть что-то вроде этого

abstract class Resource {   
}

class WorkResource extends Resource {
    public WorkResource(Person person) {
        ***********
    }
}

class HomeResource extends Resource {
    public HomeResource(Person person) {
        ***********
    }
}

Map<PhoneType, List<Resource>> contacts = personList.stream().collect(Collectors.groupingBy(p->p.getPhoneType, Collectors.mapping(Resource::new)));

А затем выполнить итерацию по карте типа

0 голосов
/ 08 апреля 2019

Учитывая, что в качестве выходных данных вы хотите использовать один список, возможно, наиболее правильным было бы создать метод, который делает это и ссылается на него: .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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...