gpt4 book ai didi

使用列表作为条件的 Java 8 流过滤器

转载 作者:行者123 更新时间:2023-11-30 07:45:16 24 4
gpt4 key购买 nike

你好,我是 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());
}

最佳答案

流方法可以包含在 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());

您可以在 filter() 中使用 List.contains() :

return paymentTypeSelector.availablePaymentTypesForChangePayment(paymentTypeParameters)
.stream()
.filter(paymentType -> !disabledPaymentTypesStrings.contains(paymentType.getName().toLowerCase()))
.collect(toList());

请注意,对于大列表,使用 Set 会更有效。

关于使用列表作为条件的 Java 8 流过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51928849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com