首页 > 解决方案 > Kotlin 如何在 kotlin 中使用 java 流 .map() 来映射不同的对象响应

问题描述

我正在尝试将一个对象数组映射到另一个具有不同类型对象的数组,我曾经使用 java 8 中的流来执行此操作,这非常简单,实例化一个对象设置其值并返回该对象。我刚切换到 Kotlin,有时做这种操作会更令人困惑。我找到的所有示例都非常简单,找不到我想要的东西。

我有这个 BalanceMap 类:

data class BalanceMap @JsonCreator constructor( var balType: String, var value: Any )

我正在从 Web 服务获取数据。

val balances: List<AcctBal> = res.getAcctBals();

AcctBal 类看起来像这样

public class AcctBal {

  @SerializedName("CurAmt")
  @Expose
  private CurAmt curAmt;

  @SerializedName("Desc")
  @Expose
  private String desc;

  @SerializedName("ExpDt")
  @Expose
  private LocalDateTime expDt;
}

并尝试将该响应映射到var balanceList: List<BalanceMap>

balances.map {}

-->var balanceList: List<BalanceMap> = balances.map { t -> fun AcctBal.toBalanceMap() = BalanceMap( balType = "", value = "" )}

我想做这样的事情:

List<ProductDetail> details = acctBal.stream().filter(f -> f.getBalType() != null).map(e -> {
                String bal = e.getBalType();
                if (avalProductInfo.getBankId().equals("00010016")) {
                    bal = e.getBalType();
                }
                ProductDetail detail = new ProductDetail();
                detail.setItem(bal);
                if (e.getCurAmt() != null) {
                    detail.setValue(e.getCurAmt().getAmt().toString());
                } else if (e.getRelationDt() != null) {
                    detail.setValue(e.getRelationDt().toGregorianCalendar().getTimeInMillis());
                } else if (e.getMemo() != null) {
                    detail.setValue(e.getMemo());
                }
                return detail;
            }).collect(toList());

我一直在尝试,但总是错的,任何帮助将不胜感激。快乐编码!

标签: kotlinjava-8java-stream

解决方案


一些快速原型

    details  = acctBal
                     .filter{ f -> f.getBalType() != null }
                     .map { it -> mapToProductDetail (it) }

你可以看看这里


推荐阅读