Java 8 Stream () с комплексным условием для List и он должен возвращать один результат - PullRequest
0 голосов
/ 27 июня 2019

У меня есть список телефонных номеров, и мне нужно фильтровать по типу телефона.Конечным результатом должен быть один объект (PhoneUsageType).Пример сценария 1. Если в списке есть 2 разных типа телефонных номеров, таких как Cell_Phone и Home_Phone, он должен вернуть мне только объект Cell_Phone.2.Если у него есть только Cell_Phone, то он должен вернуть мне тот же объект 3. Если у него нет Cell_Phone, то он должен вернуть мне Home_Phone

Cell_Phone должен быть предпочтительным объектом, если он доступен в списке

Использование list.stream (). Filter

Код

PhoneUsageType phone1 = new PhoneUsageType();
PhoneUsageKeyGrpType keyGroup1 = new PhoneUsageKeyGrpType();
keyGroup1.setPurposeCode("CELL_PHONE");
phone1.setPhoneUsageKeyGrp(keyGroup1);
PhoneNumberType phoneNumber1 = new PhoneNumberType();
phoneNumber1.setFullNumber("123");
phone1.setPhoneNumber(phoneNumber1);

PhoneUsageType phone2 = new PhoneUsageType();
PhoneUsageKeyGrpType keyGroup2 = new PhoneUsageKeyGrpType();
keyGroup2.setPurposeCode("CELL_PHONE");
phone2.setPhoneUsageKeyGrp(keyGroup2);
PhoneNumberType phoneNumber2 = new PhoneNumberType();
phoneNumber2.setFullNumber("456");
phone2.setPhoneNumber(phoneNumber2);

List<PhoneUsageType> phoneUsageList = Lists.newArrayList();

Пожалуйста, помогите мне написать логику.Заранее спасибо.Дайте мне знать, если вам нужно больше деталей.

1 Ответ

2 голосов
/ 27 июня 2019

Не используйте filter, используйте min или max сортировку по типу.

Что-то вроде следующего:

enum PhoneType {
    CELL, WORK, HOME; // in order of preference
}

class Phone {
    public PhoneType getType() ...
    public String getNumber() ...
}

Comparator<Phone> preferredNumber = Comparator.comparing(Phone::getType);

Phone best = phoneList.stream().min(preferredNumber).orElseThrow();
...