首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Kotlin集合(.find,.map)转换为Java

将Kotlin集合(.find,.map)转换为Java
EN

Stack Overflow用户
提问于 2021-04-16 19:34:38
回答 3查看 112关注 0票数 1

我需要将以下kotlin代码转换为java:

代码语言:javascript
运行
复制
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卡住了,不知道发生了什么……

代码语言:javascript
运行
复制
private void processPurchases(List<Purchase> allPurchases, boolean purchasedProductsFetched) {
    
    List<Purchase> validPurchases = new ArrayList<>();

    for (Purchase purchase : allPurchases) {
        if (isPurchaseSignatureValid(purchase)) {
            validPurchases.add(purchase);
        }
    }
}

有人能解释下一步做什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-16 21:45:58

您还可以利用Java streams并采用功能更强大的方法,如:

代码语言:javascript
运行
复制
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

票数 3
EN

Stack Overflow用户

发布于 2021-04-16 19:42:27

首先,validPurchases列表需要PurchaseInfo类型,而不是购买。所以你需要像这样写smth:

代码语言:javascript
运行
复制
validPurchases.add(PurchaseInfo(generateSkuInfo(skuDetails),purchase));
票数 2
EN

Stack Overflow用户

发布于 2021-04-16 20:39:24

@Konrad Pękala的回答帮助我理解了应该往哪个方向看。

代码语言:javascript
运行
复制
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);
                    }
                }
            }
        }


    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67124481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档