我需要将以下kotlin代码转换为java:
private fun processPurchases(allPurchases: List<Purchase>, purchasedProductsFetched: Boolean) {
val validPurchases = allPurchases.filter {
isPurchaseSignatureValid(it)
}.map { purchase ->
val skuDetails = fetchedSkuInfosList.find { it.skuId == purchase.sku }!!.skuDetails
PurchaseInfo(
generateSkuInfo(skuDetails),
purchase
)
}
}我被.map part卡住了,不知道发生了什么……
private void processPurchases(List<Purchase> allPurchases, boolean purchasedProductsFetched) {
List<Purchase> validPurchases = new ArrayList<>();
for (Purchase purchase : allPurchases) {
if (isPurchaseSignatureValid(purchase)) {
validPurchases.add(purchase);
}
}
}有人能解释下一步做什么吗?
发布于 2021-04-16 21:45:58
您还可以利用Java streams并采用功能更强大的方法,如:
void process(List<Purchase> allPurchases, Boolean purchasedProductsFetched) {
List<PurchaseInfo> validPurchases = allPurchases
.stream()
.filter(this::isPurchaseSignatureValid)
.map(purchase ->
new PurchaseInfo(
fetchedSkuInfosList
.stream()
.filter(it -> it.getSkuId().equals(purchase.getSku()))
.findFirst()
.get()//the get here is as unsafe as the !! in kotlin
.getSkuDetails(),
purchase
)
).collect(Collectors.toList());
}请注意,这复制了给定kotlin代码中的错误。!!的空安全问题、未使用的purchasedProductsFetched属性和未使用的validPurchases。
发布于 2021-04-16 19:42:27
首先,validPurchases列表需要PurchaseInfo类型,而不是购买。所以你需要像这样写smth:
validPurchases.add(PurchaseInfo(generateSkuInfo(skuDetails),purchase));发布于 2021-04-16 20:39:24
@Konrad Pękala的回答帮助我理解了应该往哪个方向看。
private void processPurchases(List<Purchase> allPurchases, boolean purchasedProductsFetched) {
if (!allPurchases.isEmpty()) {
List<PurchaseInfo> validPurchases = new ArrayList<>();
for (Purchase purchase : allPurchases) {
if (isPurchaseSignatureValid(purchase)) {
for (SkuInfo skuInfo : fetchedSkuInfoList) {
if (skuInfo.getSkuId().equals(purchase.getSku())) {
SkuDetails skuDetails = skuInfo.getSkuDetails();
PurchaseInfo purchaseInfo = new PurchaseInfo(generateSkuInfo(skuDetails), purchase);
validPurchases.add(purchaseInfo);
}
}
}
}
}
}https://stackoverflow.com/questions/67124481
复制相似问题