Здравствуйте, я новичок, когда дело доходит до Java 8, поэтому, пожалуйста, будьте терпеливы для меня :)
У меня есть метод, который возвращает пользовательский список объектов. Что мне нужно сделать: у меня есть список disabledPaymentTypesStrings
- и я не знаю, сколько у него элементов. Как я могу изменить свой код, чтобы не писать все условия, такие как !paymentType.getName().equalsIgnoreCase(disabledPaymentTypesStrings.get(1))
? Я хотел бы как-то разместить весь мой список "disabledPaymentTypesStrings" в качестве условия, но я понятия не имею, как это сделать. Пожалуйста, дайте мне несколько советов или советов :)
private List<PaymentType> listOfPaymentTypesForChangePayment(OrderPaymentTypeParameters paymentTypeParameters) {
List<String> disabledPaymentTypesStrings = newArrayList(Splitter.on(COMMA).split(systemUtils.getChangePaymentTypeDisabled()));
return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters).stream()
.filter(paymentType ->
!paymentType.getName().equalsIgnoreCase(disabledPaymentTypesStrings.get(0)) &&
!paymentType.getName().equalsIgnoreCase(disabledPaymentTypesStrings.get(1)) &&
!paymentType.getName().equalsIgnoreCase(disabledPaymentTypesStrings.get(2)))
.collect(toList());
}
3 ответа
Потоковый подход может заключаться в filter()
для потоковой передачи списка строк и сохранения элементов PaymentType
, где paymentType.getName()
не совпадают ни с какими элементами списка строк:
return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters)
.stream()
.filter(paymentType -> disabledPaymentTypesStrings.stream()
.allMatch(ref -> !ref.equalsIgnoreCase(paymentType.getName())))
.collect(toList());
Но вы также можете сравнить String
с использованием того же случая. Например строчные. Это упростит фильтрацию.
Вы можете преобразовать элементы списка ссылок в нижний регистр:
List<String> disabledPaymentTypesStrings = newArrayList(Splitter.on(COMMA).split(systemUtils.getChangePaymentTypeDisabled()))
.stream()
.map(String::toLowerCase)
.collect(toList());
И вы можете использовать List.contains()
в filter()
:
return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters)
.stream()
.filter(paymentType -> !disabledPaymentTypesStrings.contains(paymentType.getName().toLowerCase()))
.collect(toList());
Обратите внимание, что для больших списков использование Set
будет более эффективным.
Оба шага должны иметь значения в общем случае (в верхнем или нижнем регистре, я предпочел нижний регистр)
List<String> disabledPaymentTypesStringsLowerCase = newArrayList(Splitter.on(COMMA).split(systemUtils.getChangePaymentTypeDisabled()))
.stream()
.map(String::toLowerCase)
.collect(toList());
return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters)
.stream()
.map(paymentType -> paymentType.getName())
.map(String::toLowerCase)
.filter(disabledPaymentTypesStrings::contains)
.collect(toList());
Этот код может быть дополнительно реорганизован, если известен класс paymentType, предполагая, что класс paymentType равен PaymentType , и будет выглядеть следующим образом:
return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters)
.stream()
.map(PaymentType::getName)
.map(String::toLowerCase)
.filter(disabledPaymentTypesStrings::contains)
.collect(toList());
Используйте contains()
. Но вы должны думать о игнорировании чувствительности к регистру
private List<PaymentType> listOfPaymentTypesForChangePayment(OrderPaymentTypeParameters paymentTypeParameters) {
List<String> disabledPaymentTypesStrings = newArrayList(Splitter.on(COMMA).split(systemUtils.getChangePaymentTypeDisabled()));
return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters).stream()
.filter(paymentType -> !disabledPaymentTypesStrings.contains(paymentType)
.collect(toList());
}
Похожие вопросы
Новые вопросы
java
Java - это популярный язык программирования высокого уровня. Используйте этот тег, если у вас есть проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [gradle] и [maven].