使用 map() 运算符从对象中获取值并应用谓词
Fetch values from Object using map() operator and apply predicate
请耐心等待我的愚蠢问题,我是 Java8 的新手。我必须使用 lambda 编写以下代码并将条件应用于两个属性。我能够获取一个并在其上应用谓词。
for (EventTypePricingMapping eventTypePricingMapping : eventTypePricingMappings) {
BigDecimal feePerRevenue = eventTypePricingMapping.getFeePerRevenue();
if (feePerRevenue != null && feePerRevenue.intValue() < 0) {
throw ExceptionHelper.badRequest("Fee Per Transaction can't be less than zero");
}
if (eventTypePricingMapping.getFeePerReg().intValue() < 0) {
throw ExceptionHelper.badRequest("Fee Per Transaction can't be less than zero");
}
}
在下面的代码中,我如何获取 feePerRevenue
的值并对其应用谓词,正如我在下面的代码中为 getfeePerReg
所做的那样。
boolean isRegFeeInvalid = globalPricingRequests.stream()
.map(GlobalPricingRequest::getEventTypePricingList)
.flatMap(List::stream)
.map(EventTypePricingMapping::getFeePerReg)
.anyMatch(criteria);
我的谓词如下:
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
我已经按照建议尝试了以下代码,但我无法获取
中 map() 中的两个值
boolean isRegFeeInvalid = globalPricingRequests.stream()
.map(GlobalPricingRequest::getEventTypePricingList)
.flatMap(List::stream)
.map(EventTypePricingMapping::getFeePerReg,EventTypePricingMapping::getFeePerReg)
.anyMatch(verifyFeePerRegAndFeePerRevenue());
private static boolean verifyFeePerRegAndFeePerRevenue(BigDecimal feePerReg, BigDecimal feePerRevenue) {
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
return criteria.test(feePerReg) && criteria.test(feePerRevenue);
}
如何在行 map(EventTypePricingMapping::getFeePerReg,EventTypePricingMapping::getFeePerReg)
中获取两个值并将它们传递给 anyMatch 运算符
地图
<R> Stream<R> map(Function<? super T,? extends R> mapper)
Returns a stream consisting of the results of applying the given function to the elements of this stream.
This is an intermediate operation.
所以我建议创建两个不同的 List
,一个用于 feePerReg
,另一个用于 feePerRevenue
feePerReg
List<BigDecimal> feeperReg = globalPricingRequests.stream().flatMap(eventPrice->eventPrice.getEventTypePricingList().stream()).map(eventType->eventType.getFeePerReg()).collect(Collectors.toList());
按收入收费
List<BigDecimal> feePerRevenue = globalPricingRequests.stream().flatMap(eventPrice->eventPrice.getEventTypePricingList().stream()).map(eventType->eventType.getFeePerRevenue()).collect(Collectors.toList());
谓词 检查两个列表的谓词
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
verifyFeePerRegAndFeePerRevenue 方法以两个 List<BigDecimal>
作为参数
private static boolean verifyFeePerRegAndFeePerRevenue(List<BigDecimal> feePerReg, List<BigDecimal> feePerRevenue) {
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
return feePerReg.stream().anyMatch(criteria) && feePerRevenue.stream().anyMatch(criteria);
}
案例二
而不是两个不同的 List
,您可以只有一个列表同时具有 eventTypePricingMapping
和 Predicate
条件 feePerReg
和 feePerRevenue
eventTypePricingMapping
List<EventTypePricingMapping> result = globalPricingRequests.stream().flatMap(eventPrice->eventPrice.getEventTypePricingList().stream()).collect(Collectors.toList());
Predicate 谓词检查两者
Predicate<EventTypePricingMapping> criteria = value -> value.getFeePerRevenue() != null && value.getFeePerReg()!= null && value.getFeePerRevenue() < 0 && value.getFeePerReg < 0;
verifyFeePerRegAndFeePerRevenue 方法需要 List<EventTypePricingMapping>
在列表 Predicate
上应用
private static boolean verifyFeePerRegAndFeePerRevenue(List<EventTypePricingMapping> price) {
Predicate<EventTypePricingMapping> criteria = value -> value.getFeePerRevenue() != null && value.getFeePerReg()!= null && value.getFeePerRevenue() < 0 && value.getFeePerReg < 0;
return price.stream().anyMatch(criteria);
}
请耐心等待我的愚蠢问题,我是 Java8 的新手。我必须使用 lambda 编写以下代码并将条件应用于两个属性。我能够获取一个并在其上应用谓词。
for (EventTypePricingMapping eventTypePricingMapping : eventTypePricingMappings) {
BigDecimal feePerRevenue = eventTypePricingMapping.getFeePerRevenue();
if (feePerRevenue != null && feePerRevenue.intValue() < 0) {
throw ExceptionHelper.badRequest("Fee Per Transaction can't be less than zero");
}
if (eventTypePricingMapping.getFeePerReg().intValue() < 0) {
throw ExceptionHelper.badRequest("Fee Per Transaction can't be less than zero");
}
}
在下面的代码中,我如何获取 feePerRevenue
的值并对其应用谓词,正如我在下面的代码中为 getfeePerReg
所做的那样。
boolean isRegFeeInvalid = globalPricingRequests.stream()
.map(GlobalPricingRequest::getEventTypePricingList)
.flatMap(List::stream)
.map(EventTypePricingMapping::getFeePerReg)
.anyMatch(criteria);
我的谓词如下:
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
我已经按照建议尝试了以下代码,但我无法获取
中 map() 中的两个值boolean isRegFeeInvalid = globalPricingRequests.stream()
.map(GlobalPricingRequest::getEventTypePricingList)
.flatMap(List::stream)
.map(EventTypePricingMapping::getFeePerReg,EventTypePricingMapping::getFeePerReg)
.anyMatch(verifyFeePerRegAndFeePerRevenue());
private static boolean verifyFeePerRegAndFeePerRevenue(BigDecimal feePerReg, BigDecimal feePerRevenue) {
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
return criteria.test(feePerReg) && criteria.test(feePerRevenue);
}
如何在行 map(EventTypePricingMapping::getFeePerReg,EventTypePricingMapping::getFeePerReg)
中获取两个值并将它们传递给 anyMatch 运算符
地图
<R> Stream<R> map(Function<? super T,? extends R> mapper)
Returns a stream consisting of the results of applying the given function to the elements of this stream.
This is an intermediate operation.
所以我建议创建两个不同的 List
,一个用于 feePerReg
,另一个用于 feePerRevenue
feePerReg
List<BigDecimal> feeperReg = globalPricingRequests.stream().flatMap(eventPrice->eventPrice.getEventTypePricingList().stream()).map(eventType->eventType.getFeePerReg()).collect(Collectors.toList());
按收入收费
List<BigDecimal> feePerRevenue = globalPricingRequests.stream().flatMap(eventPrice->eventPrice.getEventTypePricingList().stream()).map(eventType->eventType.getFeePerRevenue()).collect(Collectors.toList());
谓词 检查两个列表的谓词
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
verifyFeePerRegAndFeePerRevenue 方法以两个 List<BigDecimal>
作为参数
private static boolean verifyFeePerRegAndFeePerRevenue(List<BigDecimal> feePerReg, List<BigDecimal> feePerRevenue) {
Predicate<BigDecimal> criteria = value -> value != null && value.signum() < 0;
return feePerReg.stream().anyMatch(criteria) && feePerRevenue.stream().anyMatch(criteria);
}
案例二
而不是两个不同的 List
,您可以只有一个列表同时具有 eventTypePricingMapping
和 Predicate
条件 feePerReg
和 feePerRevenue
eventTypePricingMapping
List<EventTypePricingMapping> result = globalPricingRequests.stream().flatMap(eventPrice->eventPrice.getEventTypePricingList().stream()).collect(Collectors.toList());
Predicate 谓词检查两者
Predicate<EventTypePricingMapping> criteria = value -> value.getFeePerRevenue() != null && value.getFeePerReg()!= null && value.getFeePerRevenue() < 0 && value.getFeePerReg < 0;
verifyFeePerRegAndFeePerRevenue 方法需要 List<EventTypePricingMapping>
在列表 Predicate
上应用
private static boolean verifyFeePerRegAndFeePerRevenue(List<EventTypePricingMapping> price) {
Predicate<EventTypePricingMapping> criteria = value -> value.getFeePerRevenue() != null && value.getFeePerReg()!= null && value.getFeePerRevenue() < 0 && value.getFeePerReg < 0;
return price.stream().anyMatch(criteria);
}